我有以下正则表达式:
^.*(?=^.{8,}$)(?=.*\d)(?=.*[!@#$%^&*-])(?=.*[A-Z])(?=.*[a-z]).*$
我用它来验证
至少一个字母
至少一个大写字母
至少一个号码
至少一个特殊字符
至少8个字符
但除此之外,我还需要限制下划线(_
)。
如果我输入密码Pa$sw0rd
,这是正确验证,这是真的。
如果我输入Pa$_sw0rd
,这也正确验证,这是错误的。
当所有规则都满足时,正则表达式正在传递。我想要一个规则来限制下划线以及上面。
任何帮助都会非常明显。
答案 0 :(得分:1)
我认为您可以使用否定字符类[^_]*
来添加此限制(同样,删除初始.*
,这是多余的,并且第一个预测已经在模式,不需要复制^
,并且它完全是多余的,因为最后可以检查总长度限制):
^(?=.*\d)(?=.*[!@#$%^&*-])(?=.*[A-Z])(?=.*[a-z])[^_]{8,}$
请参阅demo
答案 1 :(得分:1)
^(?=.*?\d)(?=.*?[!@#$%^&*-])(?=.*?[A-Z])(?=.*?[a-z])(?!.*_).{8,}$
你可以试试这个。.*
一开始没用。参见演示。