密码验证无法使用特定序列

时间:2018-04-21 04:26:27

标签: java

我写过这个方法

public boolean passwordCheck(String password)
{
    boolean isValid = false;
    int numCount = 0;

if(password.length() < 8){
    return false;
}

for(int i = 0; i < password.length(); i++){
    if(!Character.isLetterOrDigit(password.charAt(i)))
    {
        return false;
    }
    else{
        return true;
    }
}
    return isValid;
}

当我做passwordCheck(“a * b * e * d * c”)时(想象星号之间没有空格)它应该返回false,因为我有

if(!Character.isLetterOrDigit(password.charAt(i)))

因此,由于密码中的某些内容不是有效字符,我希望它会返回false,但事实并非如此。

3 个答案:

答案 0 :(得分:1)

在第一个字符是字母或数字后返回true。

答案 1 :(得分:0)

在您检查每个字符之前,您不想返回true。但是目前,只要您检查了第一个,就会返回true

一种可能的解决方案是摆脱else子句,并将return true;向下移动到循环之外,就像这样。

for(int i = 0; i < password.length(); i++){
    if(!Character.isLetterOrDigit(password.charAt(i)))
    {
       return false;
    }
}
return true;

答案 2 :(得分:0)

如果您使用&#34;返回&#34;当一个角色是'#34;不可接受的&#34; (return false)这没关系 - 因为&#34;一个糟糕的苹果会破坏这一堆#34;

并且:&#34;一个无效字符表示整个密码无效......&#34;但是如果你只是因为一个字符有效/为真而返回true。这是你方法中的错误。 -

public boolean passwordCheck(String password)
{
    if(password.length() < 8) return false;

    for(int i=0; i < password.length(); i++)
        if(!Character.isLetterOrDigit(password.charAt(i)))
            return false;

    return true;
}