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 :

Vérification chaine pseudo avec Regex


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Retoucheur Numérique
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retoucheur Numérique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 15
    Points
    15
    Par défaut Vérification chaine pseudo avec Regex
    Bonjour à tous,
    Je voudrais vérifier la structure d'un pseudo que l'utilisateur rentre dans un champs.
    Et j'ai commencé simplement avec ce code (je fais le test avec _GET pour le moment, mais le résultat viendra d'un formulaire plus tard).
    Et mon expression ne fonctionne pas, alors que quand je la teste sur un site genre regexr.com/ elle est bien valable...

    l'idée cest que la structure soit comme tel :

    n'importe quelles lettres (avec accent compris), min 2 max 13
    + obligatoirement 2 chiffres min2 max 2

    ce qui serait valide par exemple : simon46, charlotte89, épisdemaïs02,....
    ce qui ne serait pas valide par exemple : simon498, ber66nard, char_lotte5, épisdemaïsàlacrèmefraiche02,...

    Et là, avec mon code, j'arrive pas à comprendre sa logique, mais il valide et ne valide pas un peu tout et n'importe quoi...

    Quelqu'un aurait-il une idée du problème?

    Merci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $pseudo = $_GET['pseudo'];
    if (preg_match('/([a-zéèàêïâù]{2,13})\d{2,2}/i', $pseudo)) {
        echo "Pseudo ok";
    } else {
        echo "Pseudo pas ok";
    }
    ?>

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 193
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 193
    Points : 8 403
    Points
    8 403
    Billets dans le blog
    17
    Par défaut
    Et là, avec mon code, j'arrive pas à comprendre sa logique, mais il valide et ne valide pas un peu tout et n'importe quoi...
    Il faut donner des exemples qu'on puisse exécuter

    Quelqu'un aurait-il une idée du problème?
    Tu ne limites pas le champ de recherche de ton expression.

    Exemple, si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('/\d{4}/', 'abc-1234-def')
    Le résultat sera positif car tu as bien 4 chiffres dans ta chaîne.

    Si tu veux restreindre la chaîne cherchée au masque il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('/^\d{4}$/', 'abc-1234-def')
    ^ et $ symbolisant respectivement le début et la fin de la chaîne testée.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre à l'essai
    Homme Profil pro
    Retoucheur Numérique
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retoucheur Numérique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    C'est génial ! C’était effectivement bien çà le soucis...
    Tout fonctionne nickel maintenant!!

    petit test sur : https://erickeee.be/test/index.php?pseudo=simon56


    Un tout grand merci

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 881
    Points : 6 609
    Points
    6 609
    Par défaut
    À ceci près que https://erickeee.be/test/index.php?pseudo=simon56%0A (simon56 suivit d'un saut de ligne) passe comme une lettre à la poste et que les pseudos avec une majuscule accentuée ne passeront pas.

    Car si $ marque la fin de la chaîne, il tolère également un saut de ligne final. Pour éviter cette tolérance, il faut soit utiliser \z à la place, soit ajouter le modificateur D (Dollar End Only) en fin de pattern.
    Pour que le moteur de regex comprenne que, par exemple, les octets C3 et A8 composent la lettre è et ne sont pas des octets isolés qui peuvent être pris dans n'importe quel ordre, tu dois l'en informer avec le modificateur u (qui entre autre force la pattern et la chaîne sujet à être lues en UTF-8). Ainsi cette succession d'octets sera bien identifiée comme étant la lettre è et du coup, grâce au modificateur i, sa majuscule correspondante È sera bien autorisée. À noter aussi que sans le modificateur u, une quelconque lettre accentuée parmi celles que tu as choisies compteront double en longueur (puisque sur 2 octets), donc dans l'état actuel des choses: à10 est un pseudo valide.

    Ce qui nous donne:
    • soit /^[a-zéèàêïâù]{2,13}[0-9]{2}$/uiD
    • soit /^[a-zéèàêïâù]{2,13}[0-9]{2}\z/ui
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Membre à l'essai
    Homme Profil pro
    Retoucheur Numérique
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retoucheur Numérique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    ah oui effectivement ! j'avais pas poussé jusque là !
    Je vais regarder tout çà de plus près. Merci pour les explications, c’est très clair !

Discussions similaires

  1. Select avec Regex (extraction chaine)
    Par tornade69 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 16/03/2012, 16h46
  2. form de vérification de pseudo avec ajax
    Par kikou732 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/12/2011, 14h44
  3. Extraire les nombres d'une chaine avec regex
    Par Alain15 dans le forum Général Java
    Réponses: 2
    Dernier message: 04/05/2011, 08h32
  4. extraire sous chaine avec regex
    Par reg01 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 28/06/2010, 17h39
  5. Vérification de formulaire avec regexp
    Par Shadow aok dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/08/2007, 11h57

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