正则表达式验证名称

时间:2011-02-24 13:24:37

标签: php regex

我想创建一个验证人名的正则表达式。应该允许这些:

  • 字母(大写和小写)
  • -
  • 空格

创建正则表达式非常容易。问题是有些人在名字中也使用了特殊字符。例如,假设一个名为gûnther或François的用户。有许多字符,如û和ç可用,很难列出所有这些。

有没有简单的方法来检查正确的人名?

6 个答案:

答案 0 :(得分:7)

  

有没有简单的方法来检查正确的人名?

已多次讨论过这个问题。我相当肯定,人们唯一能够同意的是,为了存在,名称不能是空字符串,因此:

^.+$

(是的,我知道这可能不是OP正在寻找的。我只是在总结早期的Q& As。)

答案 1 :(得分:7)

/^\pL[\pL '-]*\z/应该做的伎俩

答案 2 :(得分:1)

简短的回答是否定的,没有简单的方法。你已经触及了最大的问题。有很多特殊情况的口音和额外的信件悬挂,它将成为一个混乱处理。此外,表达式分解为类似

^[CAPITAL_LETERS][ALL_LETERS_AND_SYMBOLS]*$

这不是那么有用,因为“Abcd”适合那个,你无法知道某人是否错误地将信息输入该字段,或者是否是一个疯狂的好莱坞父母,实际上将他们的孩子命名为Sandwich或Umbrella之类的东西

答案 3 :(得分:1)

^.+$

检查了@jensgram的答案,但是正则表达式只接受所有字符串,所以它没有解决问题,因为字符串需要是名字,在这种情况下它可以是任何字符串。

^([A-Z]{1})[a-z]+$

我的正则表达式只接受字符串,其中第一个字符为大写,后面的字符为小写字母。另外,通过其他答案,这似乎是最短的正则表达式,也是最简单的。

答案 4 :(得分:0)

我不确切知道你要做什么(验证用户名输入?)但基本上我会保持简单 - 如果文本包含数字则验证失败。甚至那可能很不稳定。

答案 5 :(得分:0)

我遇到了同样的问题。首先,我提出了像

这样的东西
    preg_match("/^[a-zA-Z]{1,}([\s-]*[a-zA-Z\s\'-]*)$/", $name))

然后意识到瑞典,中国等国家的UTF-8字符例如Õå不允许这对我的网站很重要,因为它是一个国际网站,并且不想强迫用户无法访问输入他们的真实姓名。

我认为这可能是一个更容易的解决方案,而不是试图弄清楚如何允许像O'Malley和Brooks-Schneider以及Õsmar这样的名字(让那一个上升:)来捕捉你不希望他们的字符输入。对我来说,基本上是为了避免输入xss JS代码。因此,我使用以下正则表达式来过滤掉可能有害的所有字符。

    preg_match("/[~!@#\$%\^&\*\(\)=\+\|\[\]\{\};\\:\",\.\<\>\?\/]+/", $name)

这样他们就可以输入他们想要的任何名字,除了真正不属于任何名字的字符。希望这可能有用。