我需要正则表达式匹配密码字段使用
javascript与以下要求:
>至少15个字符
>两个或多个小写字母
>两个或多个大写字母
>两位或更多位数字
>以下两个或多个特殊字符:!@#$%^& * –
我有一个正则表达式来处理MOST的情况:
/^.*(?=.{15,})(?=.{2,}\d)(?=.{2,}[a-z])(?=.{2,}[A-Z])(?=.{2,}[\!\@\#\$\%\^\&\*\-]).*$/
这里的问题是符号,它适用于:
06001
但不是:
06002
我有一个随机的密码发生器设置来彻底测试这个,所以任何想法都非常感激.谢谢!
解决方法
/^(?=(?:.*[a-z]){2})(?=(?:.*[A-Z]){2})(?=(?:.*\d){2})(?=(?:.*[!@#$%^&*-]){2}).{15,}$/
你的前卫是错误的.模式
(?=.{2,}[class])
意味着匹配2个或更多个字符(无论什么字符),然后是所需类别的1个字符.这完全不同于您指定的“所需类别的2个或更多个字符”.
要正确测试所需类的字符是否在文本中,请使用
(?=.*[class])
因为你想检查它两次,重复该模式
(?=.*[class].*[class]) # equivalent to (?=(?:.*[class]){2})