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 :

Validation de caractères [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de MicaelFelix
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 254
    Par défaut Validation de caractères
    Bonjour,

    Aujourd'hui on m'a posé une bonne question sur comment utiliser le preg_match correctement pour valider un nom sur un site web (username).
    Moi j'aimerai faire un code qui détecte si la chaine contient :
    - Au moins 3 caractères
    - Suivis de
    - caractères de a à z (insensible à la casse)
    OU
    - des nombres de de 1 à 9


    Ça m'a pas l'air bien compliqué mais pourtant... ça fonctionne pas.

    Voici le code ci dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    	$var = preg_match("(...([a-z]|[1-9])*)","----");
     
    	if($var>0)
    		echo("ok trouvé");
    	else
    		echo("pas trouvé");
     
    	echo("<br>$var");
    ?>
    Ça ne devrait pas fonctionner et pourtant... ça fonctionne... il renvoie 1 comme si c'était bon.
    On dirait que c'est bon il vérifie si il y a trois caractères, mais ensuite tous les autres caractères passent.

    Je ne comprends pas

    Et puis j'avais testé : quelle est la différence entre :
    ([a-z]) et [a-z] ?
    Moi je n'en voit aucune, pourtant l'un renvoie 1 et l'autre 0 malgré la même chaine passée en paramètre! Les () sont nécessaires pour l'évaluation avec preg_replace ?

    Quelqu'un pourrait m'aider?

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Par défaut
    Bonsoir,
    que voulez-vous comme restriction?

    Expliquez plus clairement, en donnant plusieurs exemple de ce que vous voulez et ne voulez pas.

    Cordialement,
    DaRiaN.

  3. #3
    Membre émérite
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Par défaut
    Effectivement, il renvoie une correspondance, car il manque le début et fin de ligne.
    Soit :

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    et aussi parce que ([a-z]|[1-9])* veut dire "des chiffres, des lettres ou rien du tout". Le + serait préférable à l'étoile dans ce cas...

  5. #5
    Membre éclairé Avatar de MicaelFelix
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 254
    Par défaut
    Citation Envoyé par neilbgr Voir le message
    Effectivement, il renvoie une correspondance, car il manque le début et fin de ligne.
    Merci !!!

    C'est exact, en fait je viens de comprendre, c'est que comme je n'avais pas fixé le début ni la fin, ben il trouvait un caractère qui correspondait et pouvait s'arrêter avec une correspondance.

    Voici mon code modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $chainetestee = "abc14w";
    preg_match("(^([a-z]|[1-9])([a-z]|[1-9])([a-z]|[1-9])([a-z]|[1-9])*$)",$chainetestee);
    Et ça fonctionne impecc. Avant j'avais "..." mais c'était pas bon parce que ça représentait n'importe quel caractère.

    Y'a-t-il une solution plus optimisée?

    Parce que j'utilise ([a-z]|[1-9]) quatre fois dans l'expression.
    Peut-on faire mieux ?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Par défaut
    Y a toujours moyen de faire plus court, mais plus optimisé, aucune idée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '`^([[:alnum:]]{4,})$`';

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

Discussions similaires

  1. SQL et GUID : Valeur de caractère non valide pour la ....
    Par jackfirst72 dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/03/2007, 10h46
  2. [XSD] validation de caractères spéciaux
    Par arthix dans le forum Valider
    Réponses: 4
    Dernier message: 16/09/2006, 14h18
  3. [JDBC][Débutant] Caractère non valide
    Par mavina dans le forum JDBC
    Réponses: 5
    Dernier message: 24/07/2006, 13h54
  4. [DOM] Caractère XML non valide
    Par alliance dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 14/02/2006, 11h05
  5. [JDBC]Caractère non-valide
    Par calimero82 dans le forum JDBC
    Réponses: 2
    Dernier message: 16/02/2005, 14h22

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