Contrôler un mot par expression régulière

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par tryan, 10 Octobre 2010.

  1. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Bonjour,

    Je ne parviens pas à contrôler la validité d'un mot transmit par $_GET pouvant contenir uniquement des lettres minuscules avec ou sans tiret :
    Code:
    if(!ereg("^[a-z-]$", $_GET['b']))
     {
       echo 'erreur';
     }
    
    Visiblement mon code est faux ..

    Merci
     
  2. shelcko
    shelcko WRInaute discret
    Inscrit:
    1 Janvier 2007
    Messages:
    211
    J'aime reçus:
    0
    Ca te met quoi comme message d'erreur ?
     
  3. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Je n'ai pas d'erreur particulière mais si dans mon url (donc dans $_GET['b']) je remplace le nom d'un dossier virtuel (ex :/voiture/) par (ex :/voi9ure/), je n'ai pas mon message d'erreur qui s'affiche.
     
  4. forty
    forty WRInaute passionné
    Inscrit:
    30 Octobre 2008
    Messages:
    1 901
    J'aime reçus:
    0
    il manque surement + ou * après les crochets
     
  5. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Bingo :mrgreen: un petit * et ça fonctionne .

    Merci
     
  6. idefix
    idefix WRInaute discret
    Inscrit:
    17 Janvier 2007
    Messages:
    248
    J'aime reçus:
    0
    Ton code me semble avoir différents problèmes :
    - la fonction ereg est obsolète, il faut la remplacer par preg_match
    - effectivement si tu ne rajoutes pas un * , il faudrait que ta chaîne fasse un seul caractère pour ne pas générer d'erreur.
    - Je pense qu'il faut ajouter un caractère comme # en début et en fin de pattern

    Un code qui semble bon :
    Code:
    if(!preg_match("#^[a-z-]*$#", $st))
    {
       echo 'erreur';
    }
    Si st vaut voiture, pas d'erreur.
    Si st vaut voi9ture, affichage de "erreur"
     
  7. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Merci idefix :)

    Pour un contrôle limiter au lettres majuscules et minuscules + numérique + tirets + simple quote (apostrophe)
    Code:
    if(!preg_match("#^[A-Za-z0-9-']*$#", $st))
    {
       echo 'erreur';
    }
    ça vous semble bon ?

    ps : C'est pour un champ de recherches.
     
  8. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    C'est une bonne idée de toujours mettre - au début, juste après le [. Même si dans ton cas il n'y a pas d'ambiguïté, dans de nombreux cas il peut y en avoir une (genre [a-z/-_] qui ne fait pas du tout ce que certains pourraient imaginer).

    Jacques.
     
  9. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    oki, merci ;).

    Par contre, je ne comprend pas l'utilisation du diese (#) ?

    Une petit explication en langage simple serait bienvenue :).
     
  10. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Il y a deux parties dans une regex: l'expression elle-même, et les "flags" (i pour ignorer la casse par exemple). La structure est donc <delimiteur>expression<delimiteur>flags.

    Tu peux choisir le délimiteur comme tu veux, mais si tu l'utilises dans l'expression, il faut l'"échapper" en mettant un \ avant. Le délimiteur traditionnel, qui vient de perl, puisque les regex des fonctions php pcre_* sont des "PCRE" (perl-compatible regular expressions) est le "/", mais comme il est relativement souvent utilisé, beaucoup de gens utilisent # à la place.

    Jacques.
     
  11. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Ok, merci pour tes explications jcaron :).
     
  12. idefix
    idefix WRInaute discret
    Inscrit:
    17 Janvier 2007
    Messages:
    248
    J'aime reçus:
    0
    Jcaron a tout dit. Il me semble même que mettre le tiret à la fin est obligatoire si tu veux l'inclure dans les possibilités.
    Par contre, si c'est pour un champs de recherche je crois que tu n'as pas pensé à tout. Il faut inclure les accents (qui ne seront pas inclus dans a-z, les espaces...etc.
    Il y a de très bon cours sur ce sujet (les regex) sur le site du zéro.
     
  13. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Au début, le tiret, pas à la fin...

    Si tu veux accepter les caractères accentués, alors la bonne solution c'est plutôt \w que d'essayer de les lister de façon exhaustive. Note que ça acceptera aussi le chinois, le japonais, l'arabe, le russe, le thaï, etc. si tu es en UTF-8.

    Jacques.
     
Chargement...
Similar Threads - Contrôler mot expression Forum Date
Balise Title : Google fait-il sa loi ? - Comment contrôler ses Title ? Référencement Google 14 Janvier 2020
Quel outil d'analyse de texte pour contrôler la sur-optimisation ? Rédaction web et référencement 5 Décembre 2018
Google : contrôler l'apparition du site Débuter en référencement 20 Décembre 2016
contrôler la présence de mes sites en ligne Demandes d'avis et de conseils sur vos sites 27 Avril 2015
Fonction javascript permettant de controler les champs d'un formulaire Développement d'un site Web ou d'une appli mobile 25 Septembre 2012
Extensions de liens annexes : contrôler la diffusion AdWords 23 Février 2012
Comment Google veut contrôler la presse en ligne Google : l'entreprise, les sites web, les services 22 Juin 2010
Contrôler ce qui se passe sur les pc de mon réseau Administration d'un site Web 15 Juin 2010
Controler site sur multiple IE Développement d'un site Web ou d'une appli mobile 7 Mai 2010
Php contrôler l'existance d'une valeur Développement d'un site Web ou d'une appli mobile 12 Avril 2010
Contrôler la présence de backlinks Administration d'un site Web 12 Avril 2010
Controler une Iframe Développement d'un site Web ou d'une appli mobile 4 Janvier 2010
[résolu] Plugin Firefox pour contrôler la validité d'URL Administration d'un site Web 4 Décembre 2009
contrôler si email existe Développement d'un site Web ou d'une appli mobile 7 Novembre 2009
Contrôler plusieurs champ en php sans avoir 30 lignes ... Développement d'un site Web ou d'une appli mobile 20 Septembre 2008
Comment contrôler la description dans les résultats google Référencement Google 18 Septembre 2007
indexation des images: outil pour la contrôler? Crawl et indexation Google, sitemaps 30 Mars 2007
Controler l'ordre de chargement css puis flash ? Développement d'un site Web ou d'une appli mobile 29 Juin 2006
Mieux controler mes commandes Développement d'un site Web ou d'une appli mobile 18 Mars 2006
Comment controler le temps d´exécution d´un script php Développement d'un site Web ou d'une appli mobile 17 Novembre 2005