web-dev-qa-db-fra.com

Validation d'expressions régulières de mots de passe Javascript avec des caractères spéciaux

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;
    }
}
34
Srikanth Sridhar

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.
62
João Silva
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

28
atul-tagra

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,}$/
18
Ujjaval

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);
}
14
Rujoota Shah

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;
}
9
ChaosPandion

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;
} 
1
Mustafa Genç

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)

  1. Minimum 8 caractères {>>8,20}
  2. Maximum 20 caractères {8,>>20}
  3. Au moins un caractère majuscule (?=.*[A-Z])
  4. Au moins un caractère minuscule (?=.*[a-z])
  5. Au moins un chiffre (?=.*\d)
  6. Au moins un caractère spécial (?=.*[a-zA-Z >>!#$%&? "<<])[a-zA-Z0-9 >>!#$%&?<< ]
0
Valentino Pereira