【问题标题】:Regular Expression for Full Name(must be two words or more)全名的正则表达式(必须是两个单词或更多)
【发布时间】:2016-05-27 10:46:20
【问题描述】:

我尝试为人的全名定义一个正则表达式,格式为:“Deepak Das”或“Deepak Bidyabhusan Das”。该名称必须包含至少两个与上述相同的单词,并且不能允许像“Deepak”或“Roger”等单个单词的名称。我尝试了很多,但似乎没有一个表达式起作用。

这些是我目前尝试过的表达方式:

^[a-z A-Z]+$---> this one is allowing any word names  
^[a-zA-Z\s]+$  
^[a-zA-Z\\s]+$  
^[a-z A-Zs]+$,  
^([a-zA-Z]\s[a-zA-Z])+$ ---> this one is allowing only three word or more.

您能否解释一下我可能做错了什么以及如何解决?

【问题讨论】:

标签: c# asp.net regex


【解决方案1】:

好吧,让我们先详细说明一下规则:

  1. 名称的每个部分必须以大写字母[A-Z]开头。
  2. 每个部分可以包含小写字母[a-z]
  3. 名称​​必须包含至少 2 个由 \s 分隔的部分。

例子:

  John Smith
  George W Bush     // please, notice "W" 
  Shi Li Hoi Kuang  // four parts

所以模式可以是

^[A-Z][a-z]*(\s[A-Z][a-z]*)+$

但是,请记住,真实人物的名字可能会有所不同,例如

 Charles de Batz-Castelmore d'Artagnan 

通知-'d';提供相关的规则集是一项具有挑战性的任务,更不用说为它们提供正则表达式了。

【讨论】:

    【解决方案2】:

    这应该适合你:

     ^([a-zA-Z]*)\s+([a-zA-Z ]*)$
    

    它分别捕获名字和第二个名字。它本身不会匹配单个名称。下面是这个正则表达式的一个活生生的例子:http://rubular.com/r/aux8CsJsKw

    如果您想捕获多个名字和一个姓氏,请使用:

    ^([a-zA-Z ]*?)\s+([a-zA-Z]*)$
    

    【讨论】:

      【解决方案3】:
      ^[a-zA-Z]+(\s[a-zA-Z]+)+$
      

      使用这个表达式

      【讨论】:

        【解决方案4】:

        这不起作用 留在这里作为上下文

        ^(\w+ ){2}
        

        \w 匹配任何字母或数字,+ 表示您可以将任意数量的这些字母或数字放在一起。空格就是那个空格,{2} 表示功能w+需要2次。

        编辑这应该可以工作

        正如@Draken 指出的,第二个单词后需要一个空格。

        所以更简单的方法是:

        ^\w+ \w+
        

        一个词,一个空格,一个词

        编辑2

        另外更正,我没看到可能超过2个字。

        ^\w+( \w+)+
        

        并且让他们以大写字母开头:

        ^[A-Z]\w+( [A-Z]\w+)+
        

        【讨论】:

        • 但这不允许Fred Jones.,因为它的名称末尾没有空格。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多