在php中,用正则表达式写一个用户名的验证。
要求:第一个字符为英文,只能用字母、数字、汉字、下划线,总长度限制在4-9位的昵称
<?php
//要求:第一个字符为英文,总长度限制在4-9位,可以带下划线的昵称
$str="a测试12_";
$reg='/^[A-Za-z][A-Za-z0-9_\x{4e00}-\x{9fa5}]{3,8}$/u';
$res=preg_match($reg,$str);
if ($res){
echo '正确';
}else{
echo '错误';
}
难点在于:[A-Za-z0-9_\x{4e00}-\x{9fa5}] 这一段。
"A-Za-z":验证字母
"0-9":验证数字
"_":下划线
"\x{4e00}-\x{9fa5}":代表php中的汉字正则验证
"/u":代表unicode(utf-8)匹配
在php中,不支持[\u4e00-\u9fa5]匹配汉字,而是用\x表示十六进制数据,然而php中用"[\x4e00-\x9fa5]"的写法也是错的,必须用{}把它包起来才行。此外,由于编码关系,需要用到"/u"声明编码格式。
要求 | 代码 |
---|---|
第一个字符为英文 | [A-Za-z] |
字母、数字、汉字、下划线 | [A-Za-z0-9_\x{4e00}-\x{9fa5}] |
总长度限制在4-9位 | {3,8} |
声明编码格式 | /u |