【问题标题】:Setting a minimum/maximum character count for any character using a regular expression使用正则表达式为任何字符设置最小/最大字符数
【发布时间】:2021-02-18 16:37:12
【问题描述】:

我正在尝试编写一个正则表达式,该表达式将用于文本框以验证其内容是否在 1 到 35 之间。文本框中的字符可以是任何字符:数字、字母、标点符号、白色空间等。这是我到目前为止所拥有的:

^[:;,\-@0-9a-zA-Zâéè'.\s]{1,35}$

如您所见,我必须列出所有字符。有没有更简单的方式来表示“所有”字符?

【问题讨论】:

    标签: regex


    【解决方案1】:

    像这样:.

    . 表示除换行符以外的任何字符(有时包含但通常不包含,请检查您的正则表达式风格)。

    您可以将表达式重写为^.{1,35}$,它应该匹配长度为 1-35 的任何行。

    【讨论】:

    • 在许多正则表达式引擎中,. 确实 not 匹配换行符,但匹配任何其他字符(除非您使用标志来告诉它)。在这种情况下,您可以尝试类似[\s\S](空格字符或非空格字符)。
    • 我希望echo "Hello" | grep "^.{1,35}$" 匹配,但它不...知道为什么吗?
    • 默认的grep 正则表达式风格--basic-regexp,按字面意思解释各种其他特殊字符,它们的特殊行为需要转义。 echo "Hello" | grep --basic-regexp "^.\{1,35\}$"echo "Hello" | grep --extended-regexp "^.{1,35}$" 工作。
    【解决方案2】:

    当不在字符类中时,它通常是元字符.

    所以使用^.{1,35}$。但是,dot 不包含换行符,除非对它应用 dot-all 修饰符。

    您可以使用不带任何修饰符的^[\S\s]{1,35}$,这也包括换行符。

    【讨论】:

      【解决方案3】:

      如果你想设置 Min 1 count 而没有 Max length,

      ^.{1,}$
      

      【讨论】:

      • ^.+$ 更简单。
      • 虽然这对某些用户(包括我)有帮助,但它并不能回答最初的问题。
      • @Melebius 你是对的。这适用于登陆此页面但不一定具有原始问题中提到的要求的用户。
      【解决方案4】:

      是的,.(点)可以匹配任何字符。使用:

      ^.{1,35}$
      

      【讨论】:

        【解决方案5】:

        如果您还想匹配换行符,那么您可能需要使用"^[\s\S]{1,35}$"(取决于正则表达式引擎)。否则,正如其他人所说,您应该使用"^.{1,35}$"

        【讨论】:

          猜你喜欢
          • 2013-02-23
          • 2013-04-20
          • 1970-01-01
          • 2012-06-12
          • 2016-06-13
          • 1970-01-01
          • 1970-01-01
          • 2021-03-21
          • 1970-01-01
          相关资源
          最近更新 更多