2016-07-27 3 views
-1

Ich mache ein Login-Formular. Bevor es einreicht, überprüfe ich, ob alle Felder ausgefüllt sind. Ich überprüfe auch, ob das Passwort länger als 7 Zeichen ist und mindestens eine Zahl, mindestens ein Zeichen und keine Leerzeichen enthält. Mein aktueller Code sagt mir immer wieder, dass ich einen Charakter vermisse, egal, was ich eintrage. Dies ist der Code:Warum kann mein Code nicht erkennen, dass ein Passwort Zeichen enthält?

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>"; 

     } 

    } 

Ich suche zuerst nach einem Leerzeichen. Dann überprüfe ich, ob ein Zeichen in eine Zahl umgewandelt werden kann. Wenn nicht, muss es eine Zeichenfolge sein. Wenn es konvertiert werden kann, muss es eine Nummer sein. Was immer ich eintippe, es sagt immer "Ihr Passwort muss mindestens ein Zeichen enthalten". Wie kann ich das beheben? Ich werde Ihnen mehr Code geben, wenn es notwendig ist.

Antwort

2

Das Problem ist, dass NaN ungleich vergleicht (über ==, = === und ==!) Auf einen anderen Wert, auch an einen anderen NaN Wert:

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

Versuch isNaN() zu verwenden stattdessen.