Javascript 如何编写正则表达式使密码与规则匹配

Javascript 如何编写正则表达式使密码与规则匹配,javascript,regex,passwords,Javascript,Regex,Passwords,我正在尝试编写正则表达式以使密码与以下规则匹配 最小长度-8个字符,如果包含数字和小写字母,或15个字符和任意字符组合 这是我的正则表达式 ^(?=.*\d[a-z]){8,}|([a-zA-Z0-9]{15,})$ 预期结果: 2232DDS-正确 ddds2222-正确 实际结果: 2232DDS-正确 ddds2222-不正确 你能帮我找个问题吗?问题有两个: 锚只影响它们旁边的备选方案 (?=.*\d[a-z])前瞻只需要按此顺序显示一个数字和一个小写,如果先有一个字母,然后是一个数字

我正在尝试编写正则表达式以使密码与以下规则匹配

最小长度-8个字符,如果包含数字和小写字母,或15个字符和任意字符组合

这是我的正则表达式

^(?=.*\d[a-z]){8,}|([a-zA-Z0-9]{15,})$

预期结果:
2232DDS
-正确
ddds2222
-正确

实际结果:
2232DDS
-正确
ddds2222
-不正确

你能帮我找个问题吗?

问题有两个:

  • 锚只影响它们旁边的备选方案
  • (?=.*\d[a-z])
    前瞻只需要按此顺序显示一个数字和一个小写,如果先有一个字母,然后是一个数字,它将不起作用
你可以用

/^(?:(?=.*\d)(?=.*[a-z]).{8,}|[a-zA-Z0-9]{15,})$/
  ^^^|-----------------|     ^                ^  

如果您想提高效率并遵循最佳实践,请使用

/^(?:(?=\D*\d)(?=[^a-z]*[a-z]).{8,}|[a-zA-Z0-9]{15,})$/
详细信息

  • ^
    -字符串的开头
  • (?:
    -非捕获组启动
    • (?=\D*\D)
      -至少1位
    • (?=[^a-z]*[a-z])
      -至少1个小写字母
    • {8,}
      -除换行符以外的任何8个或更多字符
  • |
    -或
    • [a-zA-Z0-9]{15,}
      -15个或更多字母数字字符
  • -非捕获组结束
  • $
    -字符串结束

以下是构建正则表达式的几个选项:

字符串至少包含一个:

  • 小写
    (?=.[a-z])
  • 大写字母
    (?=.*[A-Z])
  • 数字
    (?=.*\d)
  • 符号
    (?=.[!@\$%\^&])
字符串的最小字符数:
(?=.{8,})

您的正则表达式应该是:
(?=.[a-z])(?=.*\d)(?=.{8,})|(?=.{15,})

希望这有帮助