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

时间:2019-04-22 22:18:52

标签: regex testing passwords

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

正则表达式条件
匹配长度必须在6到16个字符(包括16个字符)之间
必须仅以字母开头
必须包含字母,数字和一个可选的连字符
不得以连字符

结尾

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

2 个答案:

答案 0 :(得分:2)

所有你需要的

^(?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
 $ 

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

答案 1 :(得分:1)

您是在已经具有量化子图案的组上设置限制量词,因此,长度限制将不起作用。

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

您可以使用

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

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

详细信息

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