用户名,会员名正则表达式(带中文)
正则表达式大部分内容都能看懂,但是自己去设计一个,就很难做到兼容很多情况。
网上找了一个通用版本,验证英文大小写加下划短杠和减号。
/^[a-zA-Z0-9_-]{4,20}$/
但是现在的需求是要能验证中文,就找了一个中文验证的正则:
[\u4E00-\u9FA5]
组合一下,就变成了这样:
/^([a-zA-Z0-9_-]|[\u4E00-\u9FA5]){4,20}$/
js测试可用。
var pattern = /^([a-zA-Z0-9_-]|[\u4E00-\u9FA5]){4,20}$/;
if (pattern.test('海滨擎蟹123')) {
alert('验证成功!');
}
加上引号,放到 preg_match($pattern, $str)
中,测试,失败。
按照 preg_match
+中文
找了一篇文章,作者详细的讲了 php 里对正则表达式验证的测试过程。
过程有兴趣的可以搜搜看,最终结果就是:
/^([a-zA-Z0-9_-]|[\x{4E00}-\x{9FA5}]){4,20}$/u
php 测试函数:
function preg_test($test){
// $rule = '/^(([1-9][0-9]*)|(([0]\.\d{1,4}|[1-9][0-9]*\.\d{1,4})))$/'; //精度为1-4的浮点数或整数
// js /^([a-zA-Z0-9_-]|[\u4E00-\u9FA5]){4,20}$/
$rule = '/^([a-zA-Z0-9_-]|[\x{4E00}-\x{9FA5}]){4,20}$/u';// 匹配4-40位字符,允许中英文、大小写、短杠、减号。
if(preg_match($rule,$test,$result)) {
return '匹配成功:'.$result[0];
} else {
return '未找到匹配项';
}
}
$test = isset($_GET['num']) ? $_GET['num'] : '123.45678';
echo preg_test($test);