Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中使用正则表达式验证名称_Php_Regex - Fatal编程技术网

在PHP中使用正则表达式验证名称

在PHP中使用正则表达式验证名称,php,regex,Php,Regex,在这里,我想验证一个名称,其中: 名称仅由以下字符组成[A-zA-Z-'\s] 但是,由两个或多个连字符或撇号组成的序列不可能存在 名字也应该以字母开头 我试过了 $name = preg_match("/^[a-zA-Z][a-zA-Z'\s-]{1,20}$/", $name); 但是,它允许使用双连字符和撇号。 如果您能提供帮助,感谢您您可以通过使用负前瞻,使包含两个或两个以上字符连字符和撇号序列的名称无效: (?!.*['-]{2}) 比如说 $names = array('Mike

在这里,我想验证一个名称,其中:

名称仅由以下字符组成[A-zA-Z-'\s] 但是,由两个或多个连字符或撇号组成的序列不可能存在 名字也应该以字母开头

我试过了

$name = preg_match("/^[a-zA-Z][a-zA-Z'\s-]{1,20}$/", $name);
但是,它允许使用双连字符和撇号。
如果您能提供帮助,感谢您

您可以通过使用负前瞻,使包含两个或两个以上字符连字符和撇号序列的名称无效:

(?!.*['-]{2})
比如说

$names = array('Mike Cannon-Brookes', "Bill O'Hara-Jones", "Jane O'-Reilly", "Mary Smythe-'Fawkes");
foreach ($names as $name) {
    $name_valid = preg_match("/^(?!.*['-]{2})[a-zA-Z][a-zA-Z'\s-]{1,20}$/", $name);
    echo "$name is " . (($name_valid) ? "valid" : "not valid") . "\n";
}
输出:

Mike Cannon-Brookes is valid
Bill O'Hara-Jones is valid
Jane O'-Reilly is not valid
Mary Smythe-'Fawkes is not valid

看起来这个问题已经得到了回答@shobeurself不完全相同,因为它不具备关于
'
-
序列的条件。这是否回答了您的问题@Alexander Cécile听起来不像OP是验证人的名字。首先,20个字符的限制不适合这些。似乎是系统的用户名或显示名。因此,重复项似乎不匹配。另一个想法是要求在任何
-
或单引号中保留一个单词字符。此模式不允许由空格包围的连字符:。