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

yop*_*tes 1 regex string

我想要一个正则表达式的全名与称呼.谁能帮帮我吗.

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

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

Spu*_*ley 6

规则一:永远不要试图对人名执行规则.有将永远是你排除谁,纯粹是因为他们的名字不符合你的期望的人.

那些没有(或想要)称呼的人怎么办?或者那些有多个人?"Sir Sir教授"在英国是一个非常有效的组合,在德国,拥有多个学位的人通常称自己为"医生博士"或类似的东西.

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

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

这是一个页面的链接,它描述了人们试图在名称上验证的一些显而易见的(而不是那么明显的)事情,这可能会让你感到震惊:

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

(我在此之前发布了类似的评论:如何在CakePHP中"验证"人名?)


jen*_*ram 5

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

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

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

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

然而,这不足以处理Nigel Oliver St. John-Mollusc III., OBE 爵士(感谢 @Tim Pietzcker)。


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