2015-06-03 27 views
2

一个特殊字符我有以下正则表达式:对密码强度正则表达式与除下划线

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

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

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

事情是正则表达式正在通过所有的规则满意。我想要一个规则来限制下面的下划线。

任何帮助将非常明显。

+0

应该没有'_' ?????? – vks

+0

每个需求都有一个正则表达式可以使整个事情更容易编码,理解,更新和维护。 – Kusalananda

回答

1

我想你可以使用一个否定的字符类[^_]*增加此限制(也,删除初始.*,它是多余的,第一先行处理已经在模式的开头,不需要重复^和它是完全多余的,因为总长度的限制可以在末来检查):

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

demo

+0

这对我有效非常感谢您的快速帮助 – vinod

+0

非常欢迎。如果它适合你,请接受答案(在向下箭头的左下方打勾)。 –

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

你可以试试这个。 .*在开始时没有用处。请参阅演示。

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

+2

您正在用'。*'添加另一个预测,这会降低性能。 –

+0

@stribizhev yups,但我觉得添加一个答案,显示另一种方式或新的方法来处理同样的事情,虽然不相同的表现明智如果确定:)添加到知识kitty :) – vks