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 :

Probleme d'expression régulière


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 29
    Points : 31
    Points
    31
    Par défaut Probleme d'expression régulière
    J'ai un petit problème avec mon code mais en fait je me demande si je fait pas ma fonction tout simplement a l'envers. Je cherche a renvoyer TRUE si il n'y a que des caractère alphanumrique dans la chaine et FALSE sinon mais cela ne marche pas trop !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $str = "cool007>";
     
    function verifspecialchar($str) {
        if(!ereg("\^\[a-zA-Z0-9\]\$", $str)){
            return "TRUE";
        }
        else {
            return "FALSE";
        }    
    }
     
    echo verifspecialchar($str);
    ?>
    Sinon c'est quoi les caractère a interdire ?

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Tu ne dois pas échapper le ^ (début d'expression) et le $ (fin d'expression), ni les [] indiquant une plage de caractères.
    Ton expression doit donc s'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        if(ereg("^[a-zA-Z0-9]$", $str))
    Au passage, tu peux simplifier ton regex par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        if(ereg("^[[:alnum:]]$", $str))

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par vg33
    if(ereg("^[[:alnum:]]$", $str))[/code]
    Là il ne vérifie que le premier caractère (ancré par ^). Il n'y a pas de quantificateur. Tant quà faire, il vaut mieux utiliser les fonctions pcre, plus rapides et plus riches.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('#[^\w\s]#', $str)
    Détectera s'il y a d'autres caractères que:
    \w cractères de mots
    \s caractères "blancs" (espaces et tab)
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par ripat
    Citation Envoyé par vg33
    if(ereg("^[[:alnum:]]$", $str))[/code]
    Là il ne vérifie que le premier caractère (ancré par ^). Il n'y a pas de quantificateur.
    En effet, il faut rajouter un quantificateur, a priori '+' (au moins 1 caractère).
    L'expression suivante n'accepte que des caractères alphanumériques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(ereg("^[[:alnum:]]+$", $str))

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Correct.

    Mais, j'insiste sur l'avantage d'utiliser les fonctions pcre qui sont *nettement * plus rapides, malgré leur richesse de fonctionalités supérieure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('#^[[:alnum:]]+$#', $str)
    Dans un cas comme celui-ci, à peu près 75% plus rapide que ereg (Voir ici)

    Et, pour les puristes, ce type d'application qui doit vérifier s'il n'y a pas de caractères interdits, est idéale pour illustrer l'utilité de l'atomic grouping. La regex s'arrêtera dès qu'elle rencontre un caractère interdit, au lieu de continuer à essayer toutes les combinaisons possibles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('#^(?>[[:alnum:]]+)$#', $str)

    On gagne encore de 25% à 50% en rapidité (Voir ici)

    Bon, évidemment, ce ne sont que quelques micro secondes mais si le site est fort sollicité et les validations fréquentes....
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

Discussions similaires

  1. probleme d expression réguliére avec regex
    Par petogo dans le forum Langage
    Réponses: 5
    Dernier message: 14/03/2013, 13h59
  2. Probleme d'expression régulière
    Par benjin dans le forum Langage
    Réponses: 1
    Dernier message: 22/01/2011, 16h19
  3. [RegEx] probleme d'expression régulière
    Par Skualys dans le forum Langage
    Réponses: 2
    Dernier message: 17/06/2009, 10h52
  4. Probleme expression régulière
    Par killuaster dans le forum Langage
    Réponses: 3
    Dernier message: 31/01/2007, 21h52
  5. [C#]Probleme avec les Expressions régulières
    Par akram46 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 07/10/2006, 13h08

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