【问题标题】:Regular Expression to match Salutation正则表达式匹配称呼
【发布时间】:2021-11-21 16:41:18
【问题描述】:

我使用了以下正则表达式:

[RegularExpression(@"^(Mr. .*|MR. .*|MRS. .*|Mrs. .*|MS. .*|Ms. .*|DR. .*|Dr. .*)", ErrorMessage = "Greeting must begin with Mr., Mrs., Ms., or Dr. and be followed by a name.")]
 public string? Greeting { get; set; }

如何强制用户在Mr.MR.MRs.Mrs. 之后输入空格,然后在空格后至少输入一个字符。

例如:如果他们输入Mr. Joe DoeMr. Joe是有效的,但他们输入的Mr.只有空格或Mr.没有空格是无效的。

【问题讨论】:

    标签: c# asp.net regex regular-language


    【解决方案1】:

    尝试将每个 * 替换为 +

    ^(Mr. .+|MR. .+|MRS. .+|Mrs. .+|MS. .+|Ms. .+|DR. .+|Dr. .+)
    

    我相信这会有所帮助。

    【讨论】:

      【解决方案2】:

      你可以试试这样的方法来开始

      ^[Mr\.]+[ ]+[A-Za-z]{0,25}[ ]?[A-za-z]{1,25}
      

      这应该与您提供的用例相匹配。

      反斜杠转义句点,因此它与文字句点匹配。

      大括号给出了它之前的分组允许有多少模式的范围。

      问号使得前面的括号分组是可选的。

      另外,给这个网站一个机会来实时试用你的正则表达式。 https://regexr.com/

      【讨论】:

        【解决方案3】:

        使用

        ^(?:[DM][rR][sS]?|M[Ss])\. .+
        

        proof

        解释

        --------------------------------------------------------------------------------
          ^                        the beginning of the string
        --------------------------------------------------------------------------------
          (?:                      group, but do not capture:
        --------------------------------------------------------------------------------
            [DM]                     any character of: 'D', 'M'
        --------------------------------------------------------------------------------
            [rR]                     any character of: 'r', 'R'
        --------------------------------------------------------------------------------
            [sS]?                    any character of: 's', 'S' (optional
                                     (matching the most amount possible))
        --------------------------------------------------------------------------------
           |                        OR
        --------------------------------------------------------------------------------
            M                        'M'
        --------------------------------------------------------------------------------
            [Ss]                     any character of: 'S', 's'
        --------------------------------------------------------------------------------
          )                        end of grouping
        --------------------------------------------------------------------------------
          \.                       '.'
        --------------------------------------------------------------------------------
                                   ' '
        --------------------------------------------------------------------------------
          .+                       any character except \n (1 or more times
                                   (matching the most amount possible))
        

        【讨论】:

          【解决方案4】:

          几个问题

          . 匹配“任何字符”,所以说 Mr. 允许某人写 Mra Mrb 等 - 在它前面放一个 \ 或将它放在一个字符类中(用 [ @ 包围它987654327@)

          * 表示“零个或多个”,因此Mr. .* 的正则表达式允许他们为名称写入零个字符。为了量化“一个或多个”,我们使用+ 而不是*

          如果你想去掉重复的元素,你可以

          (M[rRsS]|M(RS|rs)|D[rR])\. \w+
          

          第一个照顾先生和女士,第二个照顾太太,第三个博士,然后是“字面上一个句号”的共同元素,后面是一个连续的单词字符

          【讨论】:

          • 感谢 Calius 一件事 RegularExpression(@"^(Mr\. .|MR\. .|MRS\. .|Mrs\. .|MS\. .|Ms\. .|DR\. .|Dr\. .)" 它只接受空格后的一个字符
          • 你需要使用.+ - 我忘了正则表达式属性匹配整个表达式
          猜你喜欢
          • 2016-01-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-30
          • 2011-05-01
          相关资源
          最近更新 更多