使用除下划线之外的一个特殊字符的密码强度的正则表达式

时间:2015-06-03 19:53:32

标签: regex model-view-controller

我有以下正则表达式:

^.*(?=^.{8,}$)(?=.*\d)(?=.*[!@#$%^&*-])(?=.*[A-Z])(?=.*[a-z]).*$

我用它来验证
        至少一个字母
        至少一个大写字母
        至少一个号码         至少一个特殊字符
        至少8个字符

但除此之外,我还需要限制下划线(_)。 如果我输入密码Pa$sw0rd,这是正确验证,这是真的。 如果我输入Pa$_sw0rd,这也正确验证,这是错误的。

当所有规则都满足时,正则表达式正在传递。我想要一个规则来限制下划线以及上面。

任何帮助都会非常明显。

2 个答案:

答案 0 :(得分:1)

我认为您可以使用否定字符类[^_]*来添加此限制(同样,删除初始.*,这是多余的,并且第一个预测已经在模式,不需要复制^,并且它完全是多余的,因为最后可以检查总长度限制):

^(?=.*\d)(?=.*[!@#$%^&*-])(?=.*[A-Z])(?=.*[a-z])[^_]{8,}$

请参阅demo

答案 1 :(得分:1)

^(?=.*?\d)(?=.*?[!@#$%^&*-])(?=.*?[A-Z])(?=.*?[a-z])(?!.*_).{8,}$

你可以试试这个。.*一开始没用。参见演示。

https://regex101.com/r/pG1kU1/34