我想设置一个不允许特定字符的密码,例如
-_\
我的正则表达式如下
PatternCompiler compiler = new Perl5Compiler();
PatternMatcher matcher = new Perl5Matcher();
pattern = compiler.compile("^(?=.*?[a-zA-Z])(?=.*?[0-9])([A-Za-z0-9-/-~][^\\\\\\\\_\-]*)$");
部分工作。如果我在字符串和字符串的开头之间放置不需要的特殊字符,它仍然匹配密码
P@ssword123 --correct
-password@123 --it should not match
-passowrd"11 --it should not match
\password123 --it should not match
_@111Password --it should not match
p@sswor"123 --correct
如果我发现-_ \正则表达式不匹配,字符串中的任何位置。 使用Apache api匹配java中的模式
答案 0 :(得分:3)
以下是您可以尝试的一般正则表达式:
^((?=[A-Za-z])(?![_\-]).)*$
^^ whitelist ^^ blacklist
您可以包含正向和反向超前断言,它将检查是否存在字符类。以下内容可能对您有用:
String password = "-passw@rd";
// nice trick: by placing hyphen at the end of the character class,
// we don't need to escape it
String pattern = "^((?=[A-Za-z0-9@])(?![_\\\\-]).)*$";
if (password.matches(pattern)) {
System.out.println("valid");
}
else {
System.out.println("not valid");
}
话虽如此,我强烈建议您搜索密码的正则表达式。这是一个众所周知的老问题,在这方面已经做了很多很好的工作,包括Stack Overflow。