C# 正则表达式名称验证(复杂逻辑)

C# 正则表达式名称验证(复杂逻辑),c#,regex,validation,C#,Regex,Validation,我正在尝试使用以下规则验证名称: 不区分大小写 只有字母、空格、重音字符 至少有一个空格后跟一些字母John D或John Doe或John X Doe 不能同时有多个空格John X Doe 长度必须至少为5(带空格),最大为80 我想出了(?I)^[a-z]+(?:[\]?[a-z]+)*$ 一些问题: 仅验证“名称” 未验证长度 不接受重音字符 你可以用 ^(?=.{5,80}$)\p{L}*(?: \p{L}+)+$ 请参阅(我建议使用\z而不是$,因为\z匹配字符串的vary结尾,

我正在尝试使用以下规则验证名称:

  • 不区分大小写

  • 只有字母、空格、重音字符

  • 至少有一个空格后跟一些字母
    John D
    John Doe
    John X Doe

  • 不能同时有多个空格
    John X Doe

  • 长度必须至少为5(带空格),最大为80

  • 我想出了
    (?I)^[a-z]+(?:[\]?[a-z]+)*$

    一些问题:

  • 仅验证“名称”

  • 未验证长度

  • 不接受重音字符

  • 你可以用

    ^(?=.{5,80}$)\p{L}*(?: \p{L}+)+$
    
    请参阅(我建议使用
    \z
    而不是
    $
    ,因为
    \z
    匹配字符串的vary结尾,但是,如果在模式中使用纯空格,则与此无关)

    详情:

    • ^
      -字符串的开头
    • (?=.{5,80}$)
      -长度必须至少为5个字符,最多为80个字符
    • \p{L}*
      -零个或多个字母(如果字符串不能以空格开头,请使用
      +
      而不是
      *
    • (?:\p{L}++
      -一个或多个空格和一个或多个字母的序列(这符合您的要求,不能同时有多个空格和至少一个空格后跟一些字母)
    • $
      -字符串结束
    请注意,
    \p{L}
    匹配任何Unicode基本字母,因此只满足字母、空格、重音字符和不区分大小写的要求


    如果您还需要支持变音符号,请将
    \p{L}
    替换为
    [\p{L}\p{M}]

    关于重音符号,请查看
    [A-zÀ-ÿ]
    显然匹配所有字母和带有重音的字母。我不明白您所说的
    是什么意思,在我的测试中只验证“Name”
    ,它也与姓氏匹配。要验证长度,您可以检查匹配的长度。如果使用属性验证,则可以添加
    [MinLength]
    属性和
    [MaxLength]
    属性。