【问题标题】:Regex for validation on first n character用于验证前 n 个字符的正则表达式
【发布时间】:2021-06-06 14:59:27
【问题描述】:

有人可以帮我解决以下要求的正则表达式吗?

  • 输入应至少为 1 个字符,最多可包含 79 个字符。
  • 只有字母和空格([a-zA-Z ]{1,79})
  • 如果长度超过24 个字符,则应至少包含一个空格。

【问题讨论】:

  • ^(?=.{1,79}$)(?:(?=.{25})(?=\S*\s)[a-zA-Z ]+|[a-zA-Z ]+)$

标签: regex


【解决方案1】:

你可能会使用

^(?:[a-zA-Z]{1,24}|(?=.{1,79}$)[a-zA-Z]* [a-zA-Z ]*)$

模式匹配

  • ^ 字符串开始
  • (?:非捕获组
    • [a-zA-Z]{1,24} 匹配一个字符 a-zA-Z 1-24 次
    • |或者
    • (?=.{1,79}$) 肯定前瞻断言 1-79 个字符
    • [a-zA-Z]* [a-zA-Z ]* 匹配可选字符 a-zA-Z 后跟一个空格和可选字符 a-zA-Z 和一个空格
  • )关闭非捕获组
  • $ 字符串结束

Regex demo

【讨论】:

    【解决方案2】:

    假设您还想避免前导/尾随/双空格,您可以尝试:

    ^(?!\S{25,}$|.{80})[a-z]+(?: [a-z]+)*$
    
    • ^ - 起始线锚点。
    • (?! - 打开负前瞻:
      • \S{25,}$ - 任何 25 个(或更多)非空白字符,直到结尾。
      • | - 或者:
      • .{80} - 除换行符以外的任何 80 个字符。
      • ) - 关闭负前瞻。
    • [a-z]+ - 1+ 个字母。
    • (?: - 打开非捕获组:
      • [a-z]+ - 一个文字空间,后跟 1 个以上的字母。
      • )* - 关闭非捕获组并匹配 0+ 次。
    • $ - 结束线锚。

    请参阅demo


    注意:如果您不介意空格,那么您可以使用^(?!\S{25,}$|.{80})[a-z ]+$,本质上也允许像 这样的输入。

    【讨论】:

      猜你喜欢
      • 2014-12-03
      • 1970-01-01
      • 2011-10-19
      • 2013-08-04
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多