为什么我的代码无法识别密码包含字符?

时间:2016-07-27 01:57:11

标签: javascript php jquery forms passwords

我正在制作登录表单。在提交之前,我检查是否填写了所有字段。我还检查密码是否超过7个字符并且至少包含一个数字,至少一个字符,并且没有空格。我现在的代码不断告诉我,无论我输入什么,我都会错过一个角色。这是代码:

if($("#password").val()==""){

        error += "The password is required.<br>";   

    }
    else if($("#password").val().length<8){

        error += "Your password needs at least 8 characters.<br>";   

    }
    else if($("#password").val().length >= 8){

        var pass = $("#password").val().split("");

        var hasNum = false;

        var hasChar = false;

        var hasSpace = false;

        for(var i = 0; i < pass.length; i++){

            if(pass[i] == " "){

                hasSpace = true;

            }
            else if(Number(pass[i]) == NaN){

                hasChar = true;

            }
            else if(Number(pass[i]) != NaN){

                hasNum = true;

            }


        }

        if(!hasChar){

            error += "Your password must contain at least one character.<br>";

        }
        if(!hasNum){

            error += "Your password must contain at least one number.<br>";

        }
        if(hasSpace){

             error += "Spaces are not allowed in a password.<br>";   

        }

    }

我先检查一下空间。然后我检查一个字符是否可以转换为数字。如果没有,那么它必须是一个字符串。如果可以转换,则必须是数字。无论我输入什么内容,它总是说“您的密码必须包含至少一个字符”。我怎样才能解决这个问题?如果有必要,我会给你更多的代码。

1 个答案:

答案 0 :(得分:2)

问题是NaN将不等(通过==,!=,===和!==)与任何其他值(包括另一个NaN值进行比较:

NaN === NaN;// false
Number('S') == NaN; //false
Number(10) == NaN; //false

尝试使用isNaN()代替。