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

Langage PHP Discussion :

Regex Password 1 lettre maj 1 lettre min 1 digit [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 306
    Points : 194
    Points
    194
    Par défaut Regex Password 1 lettre maj 1 lettre min 1 digit
    Bonjour,

    Je cherche une expression régulière permettant de valider un mot de passe répondant aux exigences suivantes :

    - 1 lettre non accentuée majuscule minimum
    - 1 lettre non accentuée minuscule minimum
    - 1 chiffre minimum
    - entre 8 et 20 caractères

    J'ai trouvé sur le web :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,20}$/
    Le problème est que cette expression accepte les caractères accentués et les caractères spéciaux : (= . ?

    Est-ce que vous auriez une regex sous la main qui répondrait à mon besoin ?

    Merci d'avance.

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    En négation, cela pourrait le faire :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $reg = '/[^\da-xA-Z]/';
    echo ( strlen($str) < 8 or strlen($str) > 20 or preg_match($reg, $str, $m) ) ? "KO":"OK";

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 306
    Points : 194
    Points
    194
    Par défaut
    Merci mais il faut au minimum 1 lettre minuscule, majuscule et un digit.

  4. #4
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Sinon tu t'embêtes pas tu fais 4 regex unitaires dans un if...

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par kaboume Voir le message
    Merci mais il faut au minimum 1 lettre minuscule, majuscule et un digit.
    On prend un mix des deux techniques, on secoue et on sert bien frais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $str = '123456Zu';
    $ko = '/[^\da-xA-Z]/';
    $ok = '/^(?=.*\d)(?=.*[a-x])(?=.*[A-Z]).{8,20}$/';
    echo ( !preg_match($ko, $str, $m) and preg_match($ok, $str, $m) ) ? "OK":"KO";

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 306
    Points : 194
    Points
    194
    Par défaut
    Je viens de tester et ça fonctionne nickel.
    Merci.

  7. #7
    Membre averti
    Homme Profil pro
    Consultant PLM
    Inscrit en
    Août 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant PLM

    Informations forums :
    Inscription : Août 2007
    Messages : 203
    Points : 304
    Points
    304
    Par défaut
    Pourquoi utiliser deux Regex pour un tel truc ? N'oublions pas que c'est pas mal consommateur ...

    A tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\da-zA-Z]{8,20}$/

  8. #8
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Justement, bien souvent pour pas dire toujours, tester A et B dans une seule regex sera plus couteux que de tester A et b dans 2 regex séparées

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 17
    Dernier message: 02/02/2013, 23h24
  2. REGEX - Repérer des mots avec des lettres accentuées
    Par rambc dans le forum Général Python
    Réponses: 2
    Dernier message: 16/07/2011, 15h33
  3. FCT en Background pour mettre en maj les lettres
    Par prosciuto dans le forum VBScript
    Réponses: 7
    Dernier message: 31/07/2009, 17h21
  4. maj 1ère lettre d'une chaine
    Par access001 dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/07/2003, 12h27
  5. maj 1ère lettre d'une chaine
    Par access001 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 04/07/2003, 12h27

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