贪婪的正则表达式量词与密码条件不匹配

Greedy regex quantifier not matching password criteria

/(^[a-zA-Z]+-?[a-zA-Z0-9]+){5,15}$/g

正则表达式条件
匹配长度必须介于 6 到 16 个字符之间
必须仅以字母开头
必须包含字母、数字和一个可选的连字符
不得以连字符结尾

上述正则表达式不满足所有 4 个条件。尝试将 ^ 移到组之前并省略 + 量词但不起作用

您正在为已经具有量化子模式的组设置限制量词,因此,长度限制将不起作用。

要设置长度限制,请在 ^ 之后添加 (?=.{6,16}$) 前瞻,然后随意设置您的消费模式。

您可以使用

/^(?=.{6,16}$)[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)?$/

regex demo。请注意,在针对正则表达式验证整个输入字符串时,不应使用 g 修饰符。

详情

  • ^ - 字符串开头
  • (?=.{6,16}$) - 字符串输入中的 6 到 16 个字符 allowed/required
  • [a-zA-Z] - 一个字母作为第一个字符
  • [a-zA-Z0-9]* - 0+ 个字母数字字符
  • (?:-[a-zA-Z0-9]+)? - - 的可选序列,然后是 1+ 个字母数字字符
  • $ - 字符串结尾。

所有你需要的

^(?i)(?=.{6,16}$)(?!.*-.*-)[a-z][a-z\d-]*\d[a-z\d-]*(?<!-)$

可读

 ^ 
 (?i)
 (?= .{6,16} $ )               # 6 - 16 chars
 (?! .* - .* - )               # Not 2 dashes
 [a-z]                         # Start letter
 [a-z\d-]*                     # Optional letters, digits, dashes
 \d                            # Must be digit
 [a-z\d-]*                     # Optional letters, digits, dashes
 (?<! - )                      # Not end in dash
 $ 

好吧,至少我的正则表达式强制显示一个数字。