J'essaie de valider le mot de passe en utilisant une expression régulière. Le mot de passe est mis à jour si nous avons tous les caractères sous forme d'alphabets. Où vais-je mal? l'expression régulière est-elle correcte?
function validatePassword() {
var newPassword = document.getElementById('changePasswordForm').newPassword.value;
var minNumberofChars = 6;
var maxNumberofChars = 16;
var regularExpression = /^[a-zA-Z0-9!@#$%^&*]{6,16}$/;
alert(newPassword);
if(newPassword.length < minNumberofChars || newPassword.length > maxNumberofChars){
return false;
}
if(!regularExpression.test(newPassword)) {
alert("password should contain atleast one number and one special character");
return false;
}
}
Utilisez des affirmations positives lookahead :
var regularExpression = /^(?=.*[0-9])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{6,16}$/;
Sans cette valeur, votre expression rationnelle actuelle indique uniquement que vous avez 6 à 16 caractères valides. Elle ne valide pas et ne valide pas qu'elle ait au moins un nombre et au moins un caractère spécial. C'est ce que le lookahead ci-dessus est pour.
(?=.*[0-9])
- Affirme qu'une chaîne a au moins un nombre;(?=.*[!@#$%^&*])
- Assure qu'une chaîne a au moins un caractère spécial.function validatePassword() {
var p = document.getElementById('newPassword').value,
errors = [];
if (p.length < 8) {
errors.Push("Your password must be at least 8 characters");
}
if (p.search(/[a-z]/i) < 0) {
errors.Push("Your password must contain at least one letter.");
}
if (p.search(/[0-9]/) < 0) {
errors.Push("Your password must contain at least one digit.");
}
if (errors.length > 0) {
alert(errors.join("\n"));
return false;
}
return true;
}
La réponse ci-dessous pose un problème car elle ne vérifie pas la chaîne entière en raison de l'absence de [] lors de la vérification des caractères et des chiffres, il s'agit de la version correcte
vous pouvez créer votre propre expression régulière pour la validation javascript
/^ : Start
(?=.{8,}) : Length
(?=.*[a-zA-Z]) : Letters
(?=.*\d) : Digits
(?=.*[!#$%&? "]) : Special characters
$/ : End
(/^
(?=.*\d) //should contain at least one digit
(?=.*[a-z]) //should contain at least one lower case
(?=.*[A-Z]) //should contain at least one upper case
[a-zA-Z0-9]{8,} //should contain at least 8 from the mentioned characters
$/)
Example:- /^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{7,}$/
J'utilise le script suivant pour mot de passe de 8 lettres minimum, avec au moins un symbole, des lettres majuscules et minuscules et un chiffre
function checkPassword(str)
{
var re = /^(?=.*\d)(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[A-Z]).{8,}$/;
return re.test(str);
}
N'essayez pas de faire trop en une étape. Gardez chaque règle séparée.
function validatePassword() {
var p = document.getElementById('newPassword').value,
errors = [];
if (p.length < 8) {
errors.Push("Your password must be at least 8 characters");
}
if (p.search(/[a-z]/i) < 0) {
errors.Push("Your password must contain at least one letter.");
}
if (p.search(/[0-9]/) < 0) {
errors.Push("Your password must contain at least one digit.");
}
if (errors.length > 0) {
alert(errors.join("\n"));
return false;
}
return true;
}
Si vous vérifiez la longueur séparément, vous pouvez effectuer les opérations suivantes:
var regularExpression = /^[a-zA-Z]$/;
if (regularExpression.test(newPassword)) {
alert("password should contain atleast one number and one special character");
return false;
}
regex pour mot de passe:
/^(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[a-zA-Z!#$%&? "])[a-zA-Z0-9!#$%&?]{8,20}$/
Il m'a fallu un certain temps pour comprendre les restrictions, mais je l'ai fait!
Restrictions: (Remarque: j'ai utilisé >> et << pour afficher les caractères importants)
{>>8,20}
{8,>>20}
(?=.*[A-Z])
(?=.*[a-z])
(?=.*\d)
(?=.*[a-zA-Z >>!#$%&? "<<])[a-zA-Z0-9 >>!#$%&?<< ]