寻找正则表达式来检查有效的英文名称,即:
space
仅一个可接受的例子:John von Neumann
谢谢!
编辑(添加检查代码):
#!/usr/bin/php
<?php
function check_name($regex, $name)
{
$rc = 'Bad';
if (preg_match($regex, $name)) {
$rc = 'Good';
}
return '|' . $name . '| ' . $rc . "\n";
}
$regex = '/(?:[A-Za-z]+(?:\s+|$)){2,3}/';
echo check_name($regex, 'First');
echo check_name($regex, 'First Last');
echo check_name($regex, 'Two Spaces');
echo check_name($regex, 'First Middle Last');
echo check_name($regex, 'First Middle Last Fourth');
echo check_name($regex, 'First 123');
?>
答案 0 :(得分:7)
如果您说明的规则实际上是您想要的,则以下内容可行:
/^(?:[A-Za-z]+(?:\s+|$)){2,3}$/
但是,有很多不符合这些规则的现实名称,如“O'Malley”,“Jo-Jo”等。
您当然可以相当容易地扩展此正则表达式以允许其他字符 - 只需将它们添加到括号中即可。例如,要允许使用撇号和短划线,您可以使用[A-Za-z'-]
(-
必须在最后,否则它将被解释为范围。)
答案 1 :(得分:2)
奥尼尔的名字将会失败。还有Webb-Smiths等。
使用@ Amber的修改:
/(?:[A-ZA-Z .'-] + \ S *){2,3} /
答案 2 :(得分:0)
您可以尝试:
if(preg_match('/^([a-z]+ ){1,2}[a-z]+$/i',trim($input))) {
// valid full name.
}
正如其他人所说,它将允许名称中没有标点!
答案 3 :(得分:0)
这是坏主意。人们的名字可能有各种标点符号,例如破折号和撇号。他们也可能有重音或外国字母。此外,中间名的数量可能差异很大。