正则表达式在Ruby on Rails中的全名

时间:2013-12-29 09:44:44

标签: ruby-on-rails ruby regex ascii utf

我正在尝试找出符合以下条件的全名的正则表达式:

  1. 此范围内没有数字或符号:!@#\$%\^&*+_=
  2. 如果是类似英文的名字,那么:

    1. 每个单词的第一个字母是大写。
    2. 至少有一个空格
    3. 用一个词来说不可能都是资本。即John McDoe可以通过,John MCDOE不能通过。
    4. 其他(其他语言,如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真正的全名系统中学习。他们吓坏了一些人,他们把名字变得荒谬,增加了人们第二次给出真正全名的可能性。

1 个答案:

答案 0 :(得分:1)

或许这样的话会匹配任意数量的单词:

string.split(/ +/).detect{|s| not (s[0].upcase == s[0] && s[1..-1].downcase == s[1..-1]) }

此解决方案取决于String#upcaseString#downcase,以便能够使用国际字符进行操作。

第二个想法,这个问题的任何解决方案都会因为有趣的用户输入而产生现实世界的弊端

编辑,lol upvote @HamZa http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/