使用正则表达式为任何字符设置最小/最大字符数

ben*_*les 42 regex

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

^[:;,\-@0-9a-zA-Zâéè'.\s]{1,35}$
Run Code Online (Sandbox Code Playgroud)

如你所见,我必须列出所有角色.是否有更简单的方式来说出"所有"字符?

mkj*_*sen 45

像这样: .

.意味着除了换行符之外的任何字符(有时候通常不包括在内,检查你的正则表达式的味道).

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

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

小智 16

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

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

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


Kur*_*tal 11

是的,.(点)会匹配任何角色.使用:

^.{1,35}$
Run Code Online (Sandbox Code Playgroud)


Kap*_*lrc 10

如果要设置最小1计数而不设置最大长度,

^.{1,}$
Run Code Online (Sandbox Code Playgroud)

  • `^.+ $`对此更简单. (3认同)
  • @Melebius你是对的。这是针对登陆此页面但不一定满足原始问题中提到的要求的用户。 (3认同)

Edw*_*per 5

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