IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Expression r�guli�re (regex) pour tester le format d'un password


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par d�faut Expression r�guli�re (regex) pour tester le format d'un password
    Hello,

    J'ai �norm�ment de mal avec les regex, �a ne rentre pas dans ma logique (ou vice versa!), je n'y arrive pas, je n'arrive � rien en fait!

    Quelqu'un pourrait-il me monter une regex permettant de tester le format d'un mot de passe correspondant aux crit�res suivant:
    -> 6 caract�res minimum (max = 10, pense suffisant non? d'autant plus que je vais aussi rajouter un salt, avant cryptage SHA512)
    -> au moins 1 chiffre
    -> au moins 1 majuscule
    -> au moins un caract�re sp�cial
    (avec les annotations pour comprendre)

    Expression que je pourrais ensuite coller dans une fonction renvoyant true/false.

    Question subsidiaire: mes crit�res de password sont-ils assez bons pour vous, ou comment feriez-vous, vous?

    Merci.

  2. #2
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    pour moi ce n'est pas possible en une seule reg ...
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

  3. #3
    Membre �clair�
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par d�faut
    pas de solution alors?

  4. #4
    Membre �clair�
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par d�faut
    cela dit, s'il faut faire 4 tests imbriqu�s dans des if(...) else if(...) moi �a me va aussi, pas de souci.

    Le tout �tant de trouver les 4 r�gles des 4 test:

    1.) pour les chiffres on aurait un truc du genre
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    reg = /[0-9]/; 
    reg.exec(document.inscription.Passwd.value)
    -> tu confirmes?


    2.) pour les lettres maj/min on aurait un truc du genre
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    reg = /[a-zA-Z]/; 
    reg.exec(document.inscription.Passwd.value)
    -> tu confirmes?


    3.) nb car min(6)/max(10)?
    4.) la pr�sence de caract�res sp�ciaux?
    -> formule g�n�rique possible?
    OU
    -> indique 1 par 1 ceux que l'on souhaite voir utilis�?

  5. #5
    Membre �m�rite
    Avatar de Gnuum
    Homme Profil pro
    Architecte de syst�me d'information
    Inscrit en
    Mars 2007
    Messages
    215
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (�le de France)

    Informations professionnelles :
    Activit� : Architecte de syst�me d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 215
    Billets dans le blog
    1
    Par d�faut
    Mais si, mais si voyons! Tout est possible en RegExp!

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    function isValidPassword(password) {
        var charactersTypes = [
                '[A-Z]', // lettre majuscule
                '[0-9]', // chiffre
                '[^\\w]' // caractère non alphanumérique
            ]
        ;
     
        // On fabrique les différences séquences possible: chiffre-majuscule-caractère spécial, majuscule-caractère spécial-chiffre, ... (il y en a 6).
        var possibleSequences = [];
     
        for (var i = 0; i < charactersTypes.length; i++) {
            var possibleSequence = [charactersTypes[i]];
     
            for (var j = 0; j < charactersTypes.length; j++) {
                if (i === j) {
                    continue;
                }
     
                possibleSequence.push(charactersTypes[j]);
            }
     
            possibleSequences.push(possibleSequence);
     
            var possibleSequence = [charactersTypes[i]];
     
            for (var j = charactersTypes.length - 1; j >= 0 ; j--) {
                if (i === j) {
                    continue;
                }
     
                possibleSequence.push(charactersTypes[j]);
            }
     
            possibleSequences.push(possibleSequence);
        }
     
        // On crée une liste de pattern d'expression régulière vérifiant les différentes séquences.
        var patterns = [];
     
        for (var i = 0; i < possibleSequences.length; i++) {
            var possibleSequence = possibleSequences[i];
     
            // En ES6 (avec les "Littéraux de gabarits" cela donne:
            // + veut dire au moins 1
            // .* entre les différents caractères veut dire n'importe quel caractère 0 ou n fois.
            patterns.push(
                `${possibleSequence[0]}+.*${possibleSequence[1]}+.*${possibleSequence[2]}+`
            );
        }
     
        // On concatène les différentes séquence dans une seule et même expression régulière.
        // | veut dire "ou", ce qui veut dire qu'on va vérifier que le mot de passe vérifie une des séquences.
        var passwordCheck = new RegExp(patterns.join('|'));
     
        // Teste le mot de passe et renvoie true si il match, false sinon.
        return passwordCheck.test(password)
    }
     
     
    console.log(isValidPassword('abcde'));       // false
    console.log(isValidPassword('abCde0'));      // false
    console.log(isValidPassword('abCd@e'));      // false
    console.log(isValidPassword('ab5de#0'));     // false
    console.log(isValidPassword('abC@de0'));     // true
    console.log(isValidPassword('a@bezC0ceaz')); // true
    La mani�re programmatique, c'est pour comprendre ce qu'il se passe (l'algorithme peut certainement �tre bien am�lior�!). En abr�g�, �a donne:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    function isValidPassword(password) {
        return /[A-Z]+.*[0-9]+.*[^\w]+|[A-Z]+.*[^\w]+.*[0-9]+|[0-9]+.*[A-Z]+.*[^\w]+|[0-9]+.*[^\w]+.*[A-Z]+|[^\w]+.*[A-Z]+.*[0-9]+|[^\w]+.*[0-9]+.*[A-Z]+/.test(password);
    }
    Apr�s c'est surtout pour la beaut� du geste. Pour un soucis de compr�hension (et certainement de performance), je le ferais en plusieurs expressions r�guli�res.

    PS: je ne limiterais pas la taille maximale (en tout cas pas � 10).
    PS2: j'ai trich�, je n'ai pas v�rifi� la taille globale du password dans ma regexp (password.length >= 6).

  6. #6
    Membre �clair�
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par d�faut
    J'allais poster que j'avais trouv� un d�but de piste avec mon
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    var reg = /[a-z]+[A-Z]+[0-9]+/g;
    .......... sauf qu'�videment, de cette mani�re l� un mot d�butant avec 1 maj/chiffre renverra false, m�me si tous les crit�res sont l�......... mais pas dans le bon ordre!!

    Je cherchais donc comment caser un 'ou' dans ma regexp............

    MAIS � voir ta r�ponse, j'�tais encore TRES loin du compte!!
    Et j'en �tais donc arriv� � vouloir faire une analyse syntaxique manuelle � la place!

    Je vais jeter un oeil sur ton code, pour essayer de comprendre, merci.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. regex pour tester un mail ou une URL
    Par rambc dans le forum G�n�ral Python
    R�ponses: 10
    Dernier message: 23/02/2010, 12h37
  2. R�ponses: 1
    Dernier message: 04/09/2009, 12h37
  3. R�ponses: 4
    Dernier message: 20/10/2008, 22h34
  4. Probl�me de pour tester le format d'une String
    Par Virg62 dans le forum Langage
    R�ponses: 3
    Dernier message: 12/02/2008, 18h30
  5. pb avec expression r�guli�re (regex)
    Par rudhf dans le forum C#
    R�ponses: 12
    Dernier message: 10/05/2007, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo