我正在处理输入卫生,并且想编写用于密码验证的正则表达式。我使用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}$]]
我试图对其进行修改,但是我没有得到预期的结果,而且我对正则表达式也不是很了解,因为我以前从未使用过它们。我该如何创建一个可以包含所有条件的正则表达式?
谢谢
答案 0 :(得分:0)
我建议您不要为此使用RegEx,因为它编写起来很麻烦,而且维护起来也很繁琐。
最好是寻找一个可以通过配置的库(类似passay)。
如果您不希望使用常规的字符串函数来检查长度(str.length()
,以及是否存在数字和特殊字符(例如str.matches()
)。
不仅易于维护,而且速度更快,因为非常复杂的RegEx查询会很快变慢。
答案 1 :(得分:-1)
所以我想出了解决方案,但有一部分
这是每个条件的正则表达式
^((。)\ 1 {3})-不能包含3个或更多连续的相同字母,数字或特殊字符
[a-zA-Z0-9 \ S]-区分大小写的字符不能包含空格,字母和数字
[^ \”&'<> [/] {|}〜^!]-一个或多个特殊字符,除了“&’⁄ <> [\] {| }〜^!
{7,20} $-范围
但是如果将它们全部组合在一起,它们将无法按预期工作...
有什么建议吗?