我需要一个正则表达式来进行密码验证。 验证规则-
到目前为止,我有这个-
"^(?!.*(.)\\1{2})(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[^A-Za-z0-9]).
{8,50}$"
不适用于第一个字符和最后一个字符不能为符号。
我尝试过
^[a-zA-Z0-9](?!.*(.)\1{2})(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{6,48}[a-zA-Z0-9]$
但是它不能正常工作。请帮帮我。
答案 0 :(得分:0)
我认为您需要更改方法。您只有一个巨大的可扩展正则表达式的解决方案不符合Java。 我建议您考虑建立一个可以接受不同规则并将其组合的库。与您要显示的正则表达式不同,这将更容易测试,对新手来说更容易理解,错误更少,并且易于扩展。
这里讨论过: Password strength checking library 并建议http://mvnrepository.com/artifact/edu.vt.middleware/vt-password
另一个选项在这里:https://github.com/larcki/validly 所以代码看起来像这样:
import static com.validly.FailFastValidator.*;
public class Validator {
public void validate(String input) throws ValidationErrorException {
valid(input)
.mustNotBeNull("It's null")
.lengthMustBeAtLeast(2, "It's too short")
.mustStartWith("Hello", "It doesn't start properly")
.must(s -> myOwnRule(s), "It doesn't match my own rule");
}
}
祝你好运!
答案 1 :(得分:0)
每个限制都可以成为未来:
^(?=.*\d).{8,50}
.{8,50}
的长度不得超过50个字符,并且长度至少应为8个字符(?=.*\d)
必须至少包含1个数字(?=.*(\W|_))
必须至少包含1个符号(非字母或数字)字符[^\W_]
第一个字符不能是符号(非字母或数字)[^\W_]
最后一个字符不能是符号(非字母或数字)(?!.*(.)\1)
不得顺序重复任何字符超过2次(?=.*[a-z])
必须至少包含1个小写字母(?=.*[A-Z])
必须至少包含1个大写字母将它们放在一起:
^(?!.*(.)\1)(?=.*\d)(?=.*(\W|_))(?=.*[a-z])(?=.*[A-Z])[^\W_].{6,48}[^\W_]$
请参见live demo。