包含两个单独数字的正则表达式密码

Regex password containing two separate digits

在javascript

至少八个字符,其中两个单独的数字,

一个大写字母和一个小写字母以及

一个特殊字符(-, @, #, $, &, *, +) 不是/, !,?或“

试了很多东西,都不能隔开至少2个数字

开始于

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[-@#$&*+]).{8,}([^\/!?"])$/

尝试了

的变体
(?=.*\d(?!\d))

(?=.*(?<!\d)\d)

请帮忙

关于您尝试过的模式

  • 此模式 (?=.*\d(?!\d)) 匹配未直接跟随数字的数字
  • 此模式 (?=.*(?<!\d)\d) 匹配前面没有紧跟数字的数字

但这两种模式都不能确保实际有 2 个数字


您可以声明一个数字,至少 1 个非数字,然后再声明一个数字。

因为你不想匹配任何这个字符 class [^\/!?"] 你可以从模式中省略它,并且只匹配允许的字符,因为 . 匹配任意字符。

 ^(?=.*\d[^\d\n]+\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[-@#$&*+])[-@#$&*+\dA-Za-z]{8,}$
  • ^ 字符串开头
  • (?=.*\d[^\d\n]+\d) 断言 2 个单独的数字
  • (?=.*[a-z]) 断言一个字符 a-z
  • (?=.*[A-Z]) 断言字符 A-Z
  • (?=.*[-@#$&*+]) 断言被认为是特殊的字符之一
  • [-@#$&*+\dA-Za-z]{8,} 匹配任何允许的字符 8 次或更多次
  • $ 字符串结束

Regex demo

或使用 contrast with negated character classes 的变体:

^(?=.*\d[^\d\n]+\d)(?=[^a-z\n]*[a-z])(?=[^A-Z\n]*[A-Z])(?=[^-@#$&*+\n]*[-@#$&*+])[-@#$&*+\dA-Za-z]{8,}$

Regex demo