/(?=^.{8,}$)(?=.*[_!@#$%^&*-])(?=.*\d)(?=.*\W+)(?![.\n])(?=.*[a-z])(?=.*[A-Z]).*$/
我正在尝试创建一个用于密码验证的正则表达式,以便密码至少为8个字符,并包含一个大写字母、一个小写字母、一个数字和一个特殊字符。它可以很好地工作,但它无法将下划线(_)识别为特殊字符。也就是说,Pa$$w0rd匹配,但Pass_w0rd不匹配。你有什么想法吗?
/(?=^.{8,}$)(?=.*[_!@#$%^&*-])(?=.*\d)(?=.*\W+)(?![.\n])(?=.*[a-z])(?=.*[A-Z]).*$/
我正在尝试创建一个用于密码验证的正则表达式,以便密码至少为8个字符,并包含一个大写字母、一个小写字母、一个数字和一个特殊字符。它可以很好地工作,但它无法将下划线(_)识别为特殊字符。也就是说,Pa$$w0rd匹配,但Pass_w0rd不匹配。你有什么想法吗?
(?=.*[!@#$%^&*-])
(?=.*[_!@#$%^&*-])
(?=.*\W+)
\W
等同于 [^a-zA-Z0-9_]
,所以如果下划线是你唯一的特殊字符,那么正则表达式在这部分将会失败。相反,将其更改为以下内容(或者将其删除,因为在之前已经检查了特殊字符,所以它是多余的):
(?=.*[^\w_])
完整的正则表达式:
/(?=^.{8,}$)(?=.*[_!@#$%^&*-])(?=.*\d)(?=.*[^\w_])(?![.\n])(?=.*[a-z])(?=.*[A-Z]).*$/
(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[\d])(?=.*?[^\sa-zA-Z0-9]).{8,}
\W
的是除了[a-zA-Z0-9_]
之外的其他内容。下划线明确不与\W
匹配,在Pass_w0rd
中,它也没有匹配到其他任何内容。\W
有些过头了。选择一个并且你可能会更加满意。我还建议将整个测试拆分成几个单独的测试,以便更好地维护。/(?=.*[_!@#$%^&*-])(?=.*\d)(?!.*[.\n])(?=.*[a-z])(?=.*[A-Z])^.{8,}$/
你原始的正则表达式中有一些错误,例如:
[.\n]
缺少 .*
(?=.*\W+)
是多余的,可能没有任何作用