在javascript 中
至少八个字符,其中两个单独的数字,
一个大写字母和一个小写字母以及
一个特殊字符(-,@,#,$,&,*,+(不是/!,?或";
尝试过很多东西,都无法得到至少2位数字分隔的
从开始
/^(?=.*d)(?=.*[a-z])(?=.*[A-Z])(?=.*[-@#$&*+]).{8,}([^/!?"])$/
尝试使用的变体
(?=.*d(?!d))
(?=.*(?<!d)d)
请帮忙。
关于您尝试的模式
- 此模式
(?=.*d(?!d))
匹配不直接跟在数字后面的数字 - 此模式
(?=.*(?<!d)d)
与不直接在数字前面的数字匹配
但这两种模式都不能确保实际存在2位
您可以断言一个数字,至少一个非数字,然后再断言一个。
由于您不想匹配这个字符类[^/!?"]
中的任何一个,您可以从模式中省略它,只匹配允许的字符,因为.
匹配任何字符。
^(?=.*d[^dn]+d)(?=.*[a-z])(?=.*[A-Z])(?=.*[-@#$&*+])[-@#$&*+dA-Za-z]{8,}$
^
字符串开始(?=.*d[^dn]+d)
断言2个独立数字(?=.*[a-z])
断言字符a-z(?=.*[A-Z])
断言字符a-Z(?=.*[-@#$&*+])
断言被认为是特殊的字符之一[-@#$&*+dA-Za-z]{8,}
匹配8次或更多次任何允许的字符$
字符串末尾
Regex演示
或者使用与否定字符类的对比度的变体:
^(?=.*d[^dn]+d)(?=[^a-zn]*[a-z])(?=[^A-Zn]*[A-Z])(?=[^-@#$&*+n]*[-@#$&*+])[-@#$&*+dA-Za-z]{8,}$
Regex演示