2017-03-20 1 views
0

J'ai essayé de valider le mot de passe avec une fonction regex en javascript. J'ai mis le bouton désactivé par défaut et quand le mot de passe est valide, je veux activer le bouton.La validation du mot de passe avec javascript et regex ne fonctionne pas

La validation ne fonctionne pas.

Ici vous pouvez voir le code javascript:

function validPW() { 
if (isValid("passwort",document.getElementById("passwordRegistrationID").value)) { 
    document.getElementById('passwordRegistrationID').disabled=false; 
} 

function isValid (type, toValidate){ 
switch (type){ 
    case "grossbuchstabeVorhanden" : 
     var grossbuchstabe = /[A-Z]+/; 
     return grossbuchstabe.test (toValidate); 
     break; 
    case "kleinbuchstabenVorhanden" : 
     var kleinbuchstabe = /[a-z]+/; 
     return kleinbuchstabe.test (toValidate); 
    case "zahlenVorhanden" : 
     var zahlen = /[0-9]+/; 
     return zahlen.test (toValidate); 
    case "sonderzeichenVorhanden" : 
     var sonderzeichen = /[?!$%&/=<>_]+/; 
     return sonderzeichen.test (toValidate); 
    case "laengeRjichtig" : 
     var laenge =/.{9,}/; 
     return laenge.test (toValidate); 
    case "passwort": 
     return isValid("grossbuchstabeVorhanden",toValidate) && isValid("kleinbuchstabenVorhanden",toValidate) 
      && isValid("zahlenVorhanden",toValidate) && isValid("sonderzeichenVorhanden",toValidate) 
      && isValid("laengeRjichtig",toValidate) 
} 

Voici le formulaire html

<form role="form" action="/user/doRegistration" method="post" class="login-form"> 
    <div class="form-group" id="usernameRegistrationDiv"> 
     <label class="sr-only" for="form-usernameRegistration">Username</label> 
     <input type="email" name="form-usernameRegistration" required="required" placeholder="Username..." class="form-usernameRegistration form-control" 
      id="form-usernameRegistration"> 
    </div> 
    <div class="form-group" id="passwordRegistrationDiv"> 
     <label class="sr-only" for="form-passwordRegistration">Password</label> 
     <input type="password" name="form-passwordRegistration" required="required" placeholder="Password..." class="form-passwordRegistration form-control" 
      id="passwordRegistrationID" oninput="validPW();"> 
    </div> 
    <div class="form-group"> 
     <label class="sr-only" for="form-password-registration">Password repeat</label> 
     <input type="password" name="form-password-registration" required="required" placeholder="Password repeat..." class="form-password-registration form-control" 
      id="form-password"> 
    </div> 
    <button type="submit" id="buttonRegistration" class="btn" disabled> Sign up!</button> 
</form> 

Message d'erreur:

registration:97 Uncaught ReferenceError: validPW is not defined 
+0

Et quelle est votre erreur? Votre validation fonctionne et votre disable = false fonctionne – Fallenhero

+0

J'ai mis à jour le post –

Répondre

0

La validation fonctionne parfaitement dans mes tests, bien que la fonction que vous avez posté est manquant 2 accolades fermantes, donc il est techniquement pas valide JavaScript, bien que je Sume les accolades sont présents dans votre copie locale. Voici ce qu'il devrait être:

function validPW() { 
 
if (isValid("passwort",document.getElementById("passwordRegistrationID").value)) { 
 
    document.getElementById('passwordRegistrationID').disabled=false; 
 
} 
 

 
function isValid (type, toValidate){ 
 
switch (type){ 
 
    case "grossbuchstabeVorhanden" : 
 
     var grossbuchstabe = /[A-Z]+/; 
 
     return grossbuchstabe.test (toValidate); 
 
     break; 
 
    case "kleinbuchstabenVorhanden" : 
 
     var kleinbuchstabe = /[a-z]+/; 
 
     return kleinbuchstabe.test (toValidate); 
 
    case "zahlenVorhanden" : 
 
     var zahlen = /[0-9]+/; 
 
     return zahlen.test (toValidate); 
 
    case "sonderzeichenVorhanden" : 
 
     var sonderzeichen = /[?!$%&/=<>_]+/; 
 
     return sonderzeichen.test (toValidate); 
 
    case "laengeRjichtig" : 
 
     var laenge =/.{9,}/; 
 
     return laenge.test (toValidate); 
 
    case "passwort": 
 
     return isValid("grossbuchstabeVorhanden",toValidate) && isValid("kleinbuchstabenVorhanden",toValidate) 
 
      && isValid("zahlenVorhanden",toValidate) && isValid("sonderzeichenVorhanden",toValidate) 
 
      && isValid("laengeRjichtig",toValidate) 
 
} 
 
} 
 
}

Sinon, je ne pouvais pas trouver des problèmes tout en faisant un test rapide avec un valide et non valide et mot de passe.

+0

ne devrait pas être le dernier backpatch pour validPW – Fallenhero

+0

Dépend de l'intention originale - cela fonctionne dans les deux sens, car "isValid" pourrait être une fonction imbriquée, ou un global fonctionner de son propre chef. – CPR

+0

En outre, je voulais dire que l'instruction '' '' debugger''' est votre ami lors des tests. Insérez-le n'importe où dans votre code, et même si vous exécutez votre code directement dans la console JS du navigateur, le débogueur s'arrêtera à ce point afin que vous puissiez voir ce qui se passe dans votre code. N'oubliez pas de supprimer la déclaration avant de mettre votre code en direct. – CPR