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

时间:2016-09-13 21:41:31

标签: c# regex validation

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

  1. 不区分大小写

  2. 仅限字母,空格,重音字符。

  3. 至少有一个空格后跟一些字母John Djohn DoeJohn X Doe

  4. 不能同时拥有多个空格John X Doe

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

  6. 我想出了(?i)^[a-z]+(?:[\ ]?[a-z]+)*$

    https://regex101.com/r/bQ5oO9/1

    一些问题:

    1. 仅验证'姓名'

    2. 未验证长度

    3. 不接受重音字符

1 个答案:

答案 0 :(得分:1)

您可以使用

^(?=.{5,80}$)\p{L}*(?: \p{L}+)+$

请参阅this regex demo(我建议\z而不是$,因为\z匹配字符串的变量,但是,如果您使用模式中的一个平面空间,这是无关紧要的。)

详细

  • ^ - 字符串开头
  • (?=.{5,80}$) - 长度必须至少为5,最多为80个字符
  • \p{L}* - 零个或多个字母(使用+代替*如果字符串无法以空格开头
  • (?: \p{L}+)+ - 一个空格和一个或多个字母的一个或多个序列(这符合您的一次不能有多个空格至少有一个空格后跟一些空格字母或字母要求)
  • $ - 字符串结束。

请注意\p{L}匹配任何Unicode基本字母,从而满足您的仅字母,空格,重音字符不区分大小写的要求。

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