php中的姓氏验证

时间:2014-02-01 23:18:08

标签: php regex validation

我的目的是通过允许姓氏只包含字母或单引号来验证姓氏。 我不知道最快的方式是什么..可能是我想的正则表达式.. 无论如何,到目前为止,我有这个:

function check_surname($surname)
{
    $c = str_split($surname,1);
    $i = 0;
    $test = 1; // Wrong surname

    while($i < strlen($surname))
    {
       if(ctype_alpha($c[$i]) or $c[$i] == '\'')
       {
           $test = 0;
           $i++;
       }
       else
       {
           return false;
       }
    }
}

我觉得这里出了点问题,但我看不出它在哪里。 谁能帮助我?

1 个答案:

答案 0 :(得分:2)

评论中有一些很好的建议,我绝对同意@Cyclone你应该考虑变音符号(重音字母)。

幸运的是,PHP正则表达式支持Unicode类,因此这很容易做到。 Unicode包含任何字母的类L(大写,小写,修改和标题大小写)。这将允许名称中的重音字母。

我还建议您允许破折号(Katherine Zeta-Jones)和空格(Guido van Rossum)。鉴于这一切,我将使用以下正则表达式:

preg_match("/^[\p{L} '-]+$/", lname);