You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:14:55