使用正则表达式验证密码

时间:2016-02-21 17:52:52

标签: java regex string

有人可以帮助我理解为什么这不起作用

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条规则。

2 个答案:

答案 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++;

等其他测试。