这个正则表达式有什么问题?

时间:2012-10-21 11:39:32

标签: php regex

我正在使用此代码验证全名。我希望用户输入一个名称,如Abc def或Abc Def或Abc DEF等...但是有了这个,我无法得到正确的答案。

if(!preg_match("/^[A-Za-z] ?[A-Za-z]$/", $value) && !empty($value))
echo "NOT MATCHING";
else if(!empty($value))
echo "MATCHING";

5 个答案:

答案 0 :(得分:2)

尝试这种方式:

"/^[A-Za-z]+(\s[A-Za-z]+)?$/"

答案 1 :(得分:1)

添加+以匹配长于一个字符的名称;)

"/^[A-Za-z]+ ?[A-Za-z]+$/"

答案 2 :(得分:1)

角色不重复。它只允许在空格之前和之后的角色。

^[A-Za-z]+(\s)+?[A-Za-z]+$

请记住模式^[A-Za-z] ?[A-Za-z]$可以匹配

JohnWoo

因为空格是可选的。

答案 3 :(得分:1)

您在括号声明后缺少一个乘数。

这样的事情会更好:"/^[A-Za-z]+ ?[A-Za-z]+$/" 否则,这意味着您正在为每个括号语句查找1个字符长字符串。这里有+标志,“一个或多个”

答案 4 :(得分:0)

由于名称可能还有一个中间名,首字母后跟句点,或者可能有更多名称,你应该使用正则表达式

/^[A-Za-z]+\.?(\s+[A-Za-z]+\.?)*$/

如果您想将名称之间的空格仅限制为一个空格字符,请将\s+替换为[ ]

此外,如果您想允许前导和/或尾随空格,请在模式的开头和/或结尾添加\s*


比赛示例: John W. Doe Jr。