我正在尝试找出符合以下条件的全名的正则表达式:
!@#\$%\^&*+_=
如果是类似英文的名字,那么:
John McDoe
可以通过,John MCDOE
不能通过。其他(其他语言,如Shina,Korean,Jap),全部通过。
Should Pass:
Ms. Jan Levinson-Gould
Dr. Martin Luther King, Jr.
Brett D'Arras-d'Haudracey
Brüno
John Doe
John McDoe
Mary-Jo Jane Sally Smith
阿阿阿
阿阿 阿阿
Should Fail:
Fatty Mc.Error$
FA!L
#arold Newm@n
N4m3 w1th Numb3r5
john doe
JOHN DOE
John MCDOE
更新
我知道我们不能100%正确。但我试图从Quora's真正的全名系统中学习。他们吓坏了一些人,他们把名字变得荒谬,增加了人们第二次给出真正全名的可能性。
答案 0 :(得分:1)
或许这样的话会匹配任意数量的单词:
string.split(/ +/).detect{|s| not (s[0].upcase == s[0] && s[1..-1].downcase == s[1..-1]) }
此解决方案取决于String#upcase
和String#downcase
,以便能够使用国际字符进行操作。
第二个想法,这个问题的任何解决方案都会因为有趣的用户输入而产生现实世界的弊端
编辑,lol upvote @HamZa http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/