用称呼表示全名的正则表达式

时间:2010-11-03 11:27:27

标签: regex string

我想要一个带有称呼的全名正则表达式。任何人都可以帮助我。

^[A-Za-z] ([A-Za-z] (\\s|\\.|_)?)+[a-zA-Z]*$

这是我的正则表达式,我用它来作为全名,但它并没有表示敬意。

3 个答案:

答案 0 :(得分:6)

规则一:永远不要试图强制执行有关人名的规则。 总是是您排除的人,纯粹是因为他们的名字与您的期望不符。

那些没有(或想要)致敬的人呢?或者那些有多个人? “Sir Sir教授”在英国是一个非常有效的组合,而在德国,拥有多个学位的人通常称自己为“医生博士”或类似的东西。

然后就是实际的名字。即使对于像Mary-Jane O'Brien或“Andrévanden Berg”这样的相对普通的西方名字,你的正则表达也会失败,更不用说更多不寻常的案例了。

简而言之,准确验证名称字段几乎是不可能的。

这是一个指向页面的链接,该页面描述了人们试图对名称进行验证的一些显而易见的(并不是那么明显)的事情,这可能会让你失望:

http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/

(我在此之前发布了类似的评论:How to "Validate" Human Names in CakePHP?

答案 1 :(得分:3)

如果坚持通过正则表达式执行此操作,请将(Dr|Mrs?|Ms)\.添加到模式中。将匹配:

  • Dr.
  • Mr.
  • Mrs.
  • Ms.

即,(假设您对正则表达式的其余部分感到满意​​ - 直接从问题中获取。)

^(Dr|Mrs?|Ms)\. [A-Za-z] ([A-Za-z] (\s|\.|_)?)+[a-zA-Z]*$

然而,


修改
(Dr|Mr?s?)\.错了,抱歉。它也匹配M.。谢谢,@ tchrist。

答案 2 :(得分:2)

您可以使用http://regexlib.com/REDetails.aspx?regexp_id=2502

的略微修改版本