在php中,通過正則表達式對用戶名進行格式驗證,煩了我好久,終於找到了解決辦法,在這里分享給大家。
用戶名驗證規則:用戶名只能由數字、字母、中文漢字及下划線組成,不能包含特殊符號。
<?php
header('Content-Type:text/html;charset=utf-8');
$string = "梅子16352_aa";
if(preg_match('/^[A-Za-z0-9_\x{4e00}-\x{9fa5}]+$/u',$string)) {
echo "可以注冊!";
}else{
echo "用戶名由2-16位數字或字母、漢字、下划線組成!";
}
關鍵在於"/^[A-Za-z0-9_\x{4e00}-\x{9fa5}]+$/u"這一段,其中"A-Za-z0-9_"代表驗證字母、數字及下划線,"\x{4e00}-\x{9fa5}"代表漢字驗證。"/u"代表unicode(utf-8)匹配。
在php中,不支持[\u4e00-\u9fa5]匹配漢字,而是用\x表示十六進制數據,然而php中用"[\x4e00-\x9fa5]"的寫法也是錯的,必須用{}把它包起來才行。此外,由於編碼關系,需要用到"/u"聲明編碼格式。
