PHP正则表达式验证姓名报错:字符类范围顺序错误
解决PHP正则验证用户姓名的编译错误问题
嘿,我来帮你搞定这个正则表达式的问题!你遇到的preg_match(): Compilation failed: range out of order in character class错误,根源出在你写的[a-Z]这个字符类上。
错误原因解释
在ASCII编码里,大写字母Z的ASCII值是90,而小写字母a的ASCII值是97,你写的范围a-Z相当于要求匹配“从ASCII值97到90的字符”——这完全是反向的,正则引擎根本无法识别这种无效的范围,所以直接编译失败了。
修正后的正则表达式
根据你的需求(仅含字母,首字母大小写均可,后续为小写字母,长度2-15位且无空格),正确的正则应该是:
/^[A-Za-z][a-z]{1,14}$/
正则规则拆解
^:匹配字符串的开头,确保姓名从符合规则的字符开始[A-Za-z]:匹配第一个字符,允许任何大小写字母(满足首字母的要求)[a-z]{1,14}:匹配接下来的1到14个小写字母,这样总长度就是2到15位(1+1到1+14),完美符合长度限制$:匹配字符串的结尾,确保姓名后面没有多余的空格或其他非法字符
测试示例代码
你可以用这段代码验证不同情况:
$testNames = [ "Alice", // 符合要求:首字母大写,后续小写,长度5 "bob", // 符合要求:首字母小写,后续小写,长度3 "Abcdefghijklmno", // 符合要求:总长度15 "AlIce", // 不符合:中间有大写字母 "A", // 不符合:长度不足2 "Alice Smith" // 不符合:包含空格 ]; foreach ($testNames as $name) { if (preg_match('/^[A-Za-z][a-z]{1,14}$/', $name)) { echo "姓名「{$name}」格式正确<br>"; } else { echo "姓名「{$name}」格式错误<br>"; } }
内容的提问来源于stack exchange,提问作者Zestyy99
相关产品推荐
相关产品推荐

