/(?=^.{8,}$)(?=.*[_!@#$%^&*-])(?=.*\d)(?=.*\W+)(?![.\n])(?=.*[a-z])(?=.*[A-Z]).*$/
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用密码验证的正则表达式,使密码必须至少为8个字符,并包括一个大写,一个小写,一个数字和一个特殊字符.它工作正常,但它不会将下划线(_)识别为特殊字符.即,Pa $$ w0rd匹配,但Pass_w0rd没有.思考?
正则表达式的这一部分似乎正在寻找特殊字符:
(?=.*[!@#$%^&*-])
Run Code Online (Sandbox Code Playgroud)
请注意,字符类不包含下划线,请尝试将其更改为以下内容:
(?=.*[_!@#$%^&*-])
Run Code Online (Sandbox Code Playgroud)
您还需要修改或删除正则表达式的这部分:
(?=.*\W+)
Run Code Online (Sandbox Code Playgroud)
\W相当于[^a-zA-Z0-9_],所以如果下划线是唯一的特殊字符,正则表达式的这一部分将导致它失败。相反,将其更改为以下内容(或将其删除,它是多余的,因为您之前已经检查过特殊字符):
(?=.*[^\w_])
Run Code Online (Sandbox Code Playgroud)
完整的正则表达式:
/(?=^.{8,}$)(?=.*[_!@#$%^&*-])(?=.*\d)(?=.*[^\w_])(?![.\n])(?=.*[a-z])(?=.*[A-Z]).*$/
Run Code Online (Sandbox Code Playgroud)