Quelqu'un peut-il me dire pourquoi cette fonction ne fonctionne pas? la longueur du mot de passe et la vérification du nombre fonctionnent parfaitement. Mais il y a quelque chose qui ne va pas avec la vérification des grandes capitales ...
function validera() { var passw = document.getElementById("User-Password").value; var upper = /[A-Z]/ ; var number = /[0-9]/; if (passw.length < 6 || !number.test(passw) || !upper.test(passw)) { if (passw.length < 6) { alert("Please make sure password is longer than 6 characters.") return false; } var counter = 0; var i; for(i = 0; i < passw.length; i++){ passw.charAt(i) if(upper.test(passw.charAt(i))){ counter++; break; } } if( counter < 2 ){ alert("Please make sure password includes 2 capital letters") return false; } if (!number.test(passw)) { alert("Please make sure Password Includes a Digit") return false; } } else { alert("Account created") }
Ou dois-je utiliser regex?
3 Réponses :
Si vous prévoyez d'utiliser regex pour trouver deux lettres majuscules, vous pouvez utiliser comme
\w*[A-Z]\w*[A-Z]\w*
Testez ceci ici sur regextester
Ici, vérifiez Fiddle
CreateRandomPassword(Length, isUpperAlpha, isLowerAlpha, isNumaric ,SpecialChars)
J'ai développé une fonction facile pour générer un mot de passe
Voici une fonction qui renvoie un objet avec un message et un booléen.
Exemple d'extrait:
function validera() { let passw = document.getElementById("User-Password").value; let check = testPassword(passwd); if (check.valid) { alert(check.message); return false; } else { alert("Account created") } }
Ensuite, votre fonction peut être simplifiée.
function testPassword(pwd) { if (pwd.length <= 6) return { valid: false, message: "Please make sure password is longer than 6 characters." }; if(!/[A-Z].*[A-Z]/.test(pwd)) return { valid: false, message: "Please make sure password includes 2 capital letters" }; if (!/\d/.test(pwd)) return { valid: false, message: "Please make sure Password Includes a Digit" }; if (/\s/.test(pwd)) return { valid: false, message: "Please only use visible characters" }; return { valid: true, message: "Valid Password" }; } console.log(testPassword('Val1dPassword')); console.log(testPassword('SH0rt')); console.log(testPassword('No2capitals')); console.log(testPassword('NoDigits')); console.log(testPassword('Has\tat least 1 WhiteSpace'));
Votre instruction
break
rompt la boucle dès que vous rencontrez la première lettre majuscule. Ainsi, votre compteur sera toujours 1.Pourquoi faire une boucle quand 1 test regex ferait l'affaire?
if (! / [A-Z]. * [A-Z] /. test (passw)) {alert ('Cap me two!'); return false;}
Ça ne marche toujours pas? if (! / [A-Z]. * [A-Z] /. test (passw)) {alert ('Cap me two!'); return false;} est-ce juste comme ça? je n'ai jamais utilisé de regex auparavant
Je peux toujours écrire "test1A"