PHP 名称验证正则表达式
Posted
技术标签:
【中文标题】PHP 名称验证正则表达式【英文标题】:PHP Name validation RegEx 【发布时间】:2021-11-23 19:19:22 【问题描述】:我正在尝试使用以下代码在注册时验证用户名:
$str = $input['s_name'];
$pattern = '/^[a-zA-Z0-9][a-zA-Z0-9\s.+&-]$/';
$validname = 0;
$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.
问题是我尝试的每个正则表达式表单都返回错误名称无效,对于上面的示例:T&T Production 007 B.V.A.
我做错了什么?
【问题讨论】:
尝试:/^[a-zA-Z0-9][a-zA-Z0-9\s.+&-]+$
注意:在模式末尾添加 + 符号。
之前尝试过,即使使用/^[a-zA-Z0-9][a-zA-Z0-9\s.+&-]*$/
,它仍然无法正常工作。
它工作正常,见 php demo(也许检查 $input['s_name'] 的值对你有帮助)
发现问题。它是 & 字符,以某种方式被修剪,表单返回 i.ibb.co/DV4P0NV/fail.png 那么如何处理 &
并将其添加到正则表达式中?
公平地说,“有效”名称的整个前提是有缺陷的,但如果你考虑你的问题,你真正的问题是 .
DOT ALL 和 +
在正则表达式中具有特殊含义,应该使其具有字面意义。否则,请考虑像 O'Riley 这样的名称或像 Schlüter 这样没有拉丁字母字符的名称所带来的问题,这将使您的正则表达式检查失败。您可以使用 PCRE Unicode 代码字符属性 \pL
解决此问题。
【参考方案1】:
修复它:
/^[a-zA-Z0-9][a-zA-Z0-9\s.+&-]+$/'
感谢 Alireza 的帮助!
【讨论】:
以上是关于PHP 名称验证正则表达式的主要内容,如果未能解决你的问题,请参考以下文章