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 名称验证正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

php 正则验证字符串是否为数字

PHP常用的一些正则表达式

求PHP用户名注册验证正则表达式(6-16位字符,字母开头,只包含字母数字下划线)可支持中文

PHP正则表达式

在 PHP 中使用正则表达式进行电子邮件验证

正则表达式全名验证