有人可以帮助我理解为什么这不起作用
public boolean validatePassword(String pass){
final int MIN_LENGTH = 6;// Minimum length 6
// check if password is correct length and that it does not
// contain any invalid characters
if(pass.length() >= MIN_LENGTH && !pass.matches("(.*)[^.-_+!?=a-zA-Z0-9](.*)")){
// 4 rules, 3 should be fulfilled
// 1: Contain upper characters (A-Z)
// 2: Contain lower characters (a-z)
// 3: Contain numbers (0-9)
// 4: Contain following character . - _ + ! ? =
int ruleCount = 0; // counting fulfilled rules
if(pass.matches("(.*)[A-Z](.*)")) ruleCount++;
if(pass.matches("(.*)[a-z](.*)")) ruleCount++;
if(pass.matches("(.*)[0-9](.*)")) ruleCount++;
if(pass.matches("(.*)[.-_+!?=](.*)")) ruleCount++;
if(ruleCount >= 3) return true; // password verified
}
// password not verified
return false;
}
由于某种原因,它接受包含大小写字母的密码,并且还验证包含数字和小写字母的密码的密码。但它应该只验证是否满足了3条规则。
答案 0 :(得分:3)
你上次检查错了。请注意,-
定义[]
组中的范围,例如[A-Z]
。
不要忘记在这里使用\\
:
if(pass.matches("(.*)[.\\-_+!?=](.*)")) ruleCount++;
答案 1 :(得分:2)
AFIK,matches
是Pattern的一种方法,而不是String。
boolean b = Pattern.matches("a.*", text) ;
您应该使用:
if(Pattern.matches(".*[A-Z].*", pass)) ruleCount++;
等其他测试。