PHP注册用户名/企业名正则验证失败,合法值无法匹配问题排查
问题原因
你的代码核心问题出在正则规则的写法错误,具体有2个问题:
- 缺失量词限制,当前规则仅能匹配长度为2的字符串:
你的正则/^[a-zA-Z0-9][a-zA-Z0-9\s.+&-]$/中,第二个允许字符的分组后没有加量词,默认仅匹配1次,加上开头的1个首字符,总共仅支持2位长度的内容,你测试的人名、企业名长度都远大于2,自然匹配失败。 - 正则内错误使用了HTML实体编码的
&:
你从用户输入拿到的是原始&字符,不是HTML转义后的&,直接在正则里写&即可,不需要写HTML实体。
修正后的代码
$str = $input['s_name']; // 这里加了{1,62}量词,代表除首字符外允许1-62个合法字符,总长度2-63位,可按需调整长度范围 $pattern = '/^[a-zA-Z0-9][a-zA-Z0-9\s.+&-]{1,62}$/'; $validname = preg_match($pattern, $str); if ($validname == 0) { $flash_error .= _m('The name is not valid') . PHP_EOL; $error[] = 10; }
修正后的规则完全符合你的需求:首字符仅允许字母/数字,后续可包含字母、数字、空格、.、+、&、-,可正常匹配John Doe、T&T Production 007 B.V.A.这类内容。
内容的提问来源于stack exchange,提问作者Turbo
相关产品推荐
相关产品推荐

