编写用于密码验证的正则表达式

时间:2019-03-19 20:10:42

标签: java regex regex-lookarounds

我正在处理输入卫生,并且想编写用于密码验证的正则表达式。我使用OWASP ESAPI进行输入参数的验证,但是我不能这样做,因为提供给ESAPI进行密码验证的正则表达式不能满足所有条件。

例如

•8-20个字符,使用字母和数字

•不能包含3个或更多连续的相同字母,数字或特殊字符

•不能包含空格

可选:

•一个或多个特殊字符,除了“&’⁄ <> [\] {| }〜^!

•区分大小写

PWASP ESAPI正则表达式-![CDATA[^(?:(?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))(?!.*(.)\1{2,})[A-Za-z0-9!~<>,;:_=?*+#."&§%°()\|\[\]\-\$\^\@\/]{8,32}$]]

我试图对其进行修改,但是我没有得到预期的结果,而且我对正则表达式也不是很了解,因为我以前从未使用过它们。我该如何创建一个可以包含所有条件的正则表达式?

谢谢

2 个答案:

答案 0 :(得分:0)

我建议您不要为此使用RegEx,因为它编写起来很麻烦,而且维护起来也很繁琐。

最好是寻找一个可以通过配置的库(类似passay)。

如果您不希望使用常规的字符串函数来检查长度(str.length(),以及是否存在数字和特殊字符(例如str.matches())。

不仅易于维护,而且速度更快,因为非常复杂的RegEx查询会很快变慢。

答案 1 :(得分:-1)

所以我想出了解决方案,但有一部分

这是每个条件的正则表达式

^((。)\ 1 {3})-不能包含3个或更多连续的相同字母,数字或特殊字符

[a-zA-Z0-9 \ S]-区分大小写的字符不能包含空格,字母和数字

[^ \”&'<> [/] {|}〜^!]-一个或多个特殊字符,除了“&’⁄ <> [\] {| }〜^!

{7,20} $-范围

但是如果将它们全部组合在一起,它们将无法按预期工作...

有什么建议吗?