PHP正则表达式检查英文名称

时间:2010-09-02 03:56:48

标签: php regex

寻找正则表达式来检查有效的英文名称,即:

  • A-Z,a-z,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');

?>

4 个答案:

答案 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)

这是坏主意。人们的名字可能有各种标点符号,例如破折号和撇号。他们也可能有重音或外国字母。此外,中间名的数量可能差异很大。