【问题标题】:Regex name validation (complex logic)正则表达式名称验证(复杂逻辑)
【发布时间】:2016-09-13 21:41:30
【问题描述】:

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

  1. 不区分大小写

  2. 只有字母、空格、重音字符。

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

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

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

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

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

一些问题:

  1. 仅验证“姓名”

  2. 未验证长度

  3. 不接受重音字符

【问题讨论】:

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

标签: c# regex validation


【解决方案1】:

你可以使用

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

参见this regex demo(我推荐\z 而不是$,因为\z 匹配字符串的变化结尾,但是,如果您在模式中使用纯空格,则无关紧要)。

详情

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

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

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

【讨论】:

    猜你喜欢
    • 2017-07-11
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    相关资源
    最近更新 更多