【发布时间】:2015-10-01 17:46:25
【问题描述】:
/(?=^.{8,}$)(?=.*[_!@#$%^&*-])(?=.*\d)(?=.*\W+)(?![.\n])(?=.*[a-z])(?=.*[A-Z]).*$/
我正在尝试为密码验证制作一个正则表达式,这样密码必须至少为 8 个字符,并且包括一个大写字母、一个小写字母、一个数字和一个特殊字符。它工作正常,但它不会将下划线 (_) 识别为特殊字符。即,Pa$$w0rd 匹配,但 Pass_w0rd 不匹配。想法?
【问题讨论】:
-
答案真的很简单。您没有在特殊字符中包含
_。 -
那是一些看起来很邪恶的正则表达式。你确定要使用正则表达式来做这样的事情吗?随着需求的变化,它可能会变得难以维护。
-
David B,实际上因为这个正则表达式使用了前瞻断言,它可能对可维护性很好。每个部分都是模块化的,不依赖任何其他部分。
-
我已经想知道正则表达式如何确保字符串包含所有多组字符并具有最小长度。 +1 用于问题和解释,因为这是我还没有想到的非常酷的方法。 :-)
标签: regex