Regex

Discussion dans 'Web, design' créé par MbK_, 7 Février 2005.

Statut de la discussion:
Fermée.
  1. Offline
    MbK_ Etudjant
    Bon apres une multitude de test pour verifier une chaine, ca ne fonctionne pas!

    je voudrait vérifier un peudo a l'aide des regex. mon code est fait comme suit.

    Code:
    if (preg_match("!^[a-zA-Z0-9._@*#\[\]-]$!", $_POST['pseudo'])){
    
    // suite du code //
    }
    else{
    echo ("erreur pseudo");
         }
    
    alors je test avec des pseudos tout a fait normaux comme "bonjour" ou "HellO"

    mais ca ne fonctionne jamais. une idée? j'ai mal construit ma regex?

    Merci a vous :)
    MbK_, 7 Février 2005
    #1
  2. Offline
    Ezekiel ! Elite
    ton '.' ne doit pas etre echappé par hazard :p?
    EDIT: non c'est ton ']' qui doit letre mais ton '[' n'a pas bsoin detre échappé
    Ezekiel !, 7 Février 2005
    #2
  3. Online
    Jereck Procrastinateur
    Equipe GamerZ.be
    1) vire les balises de couleur vu qu'elles marchent pas dans les "code" (oui, ça m'a troublé un moment)

    2) t'es sur que ton $_POST['pseudo'] et bien ce que tu as envoyé ?
    Jereck, 7 Février 2005
    #3
  4. Offline
    Bingo Beer Addict
    Je ne connais pas PHP, mais si les expressions régulières sont "perl-compatible", je ne comprends pas la présence des points d'exclamation en début et en fin de pattern.

    <edit>Le plus simple serait de nous dire ce que doit valider ou invalider ton expression régulière</edit>
    Bingo, 7 Février 2005
    #4
  5. Online
    Jereck Procrastinateur
    Equipe GamerZ.be
    (source : site du zero)
    Jereck, 7 Février 2005
    #5
  6. Offline
    Bingo Beer Addict
    OK, je me doutais qu'il s'agissait d'un truc dans le style, merci pour la précision.

    Pour en revenir à l'expression, je pense que tu dravis échapper tous les caractères non alphanumériques (c'est une bonne pratique). Le point, je ne comprends pas trop ce qu'il fait là non plus.
    Tu peux éventuellement remplacer a-zA-Z0-9_ par \w. (sauf si t ues en locale "fr" et que tu ne veux pas d'accent)
    Bingo, 7 Février 2005
    #6
  7. Offline
    Ezekiel ! Elite
    il doit pas les echapper vu qu'il est entouré de [ ] ...
    Ezekiel !, 7 Février 2005
    #7
  8. Offline
    Bingo Beer Addict
    C'est vrai j'avais complètement oublié ça.
    Mais la conséquence directe est que il doit placer le ] en premier et le - en dernier sans les échapper (pour le - c'est déjà bon).
    Avec un + en fin d'expression, ça devrait aller.
    "!^(\w|[].@*#[-])+$!"
    Bingo, 7 Février 2005
    #8
  9. Offline
    MbK_ Etudjant
    Bon dsl de pas avoir été la cette aprem mais madame m'a réquisitionné! :D

    Alors j'ai un peu rechipoté a tout ca et j'ai trouvé une solution.

    Le truc qui a tout changé, c'est que j'ai demandé que la chaine soit pas plus petite que x caracteres.

    Je sais pas pk mais ca marche depuis!

    Code:
    if (!preg_match('!^[a-zA-Z0-9_]{3,}$!', $_POST['pseudo'])){
    Enfin vouila. Je vais essayé de rajouter quelques caracteres qui devraient êtres permis.

    Merci a tous ;)
    MbK_, 7 Février 2005
    #9
  10. Offline
    Bingo Beer Addict
    Ta première regexp ne fonctionnait qu'avec une chaîne de 1 caractère (pas très pratique).

    C'est donc ça que tu dois faire, car cela équivaut à {1,}.
    Bingo, 7 Février 2005
    #10
  11. Offline
    MbK_ Etudjant
    qd on spécifie pas le nombre de caractere, ca veut dire 1caractere?

    ha je savais pas :p

    Merci ;)
    MbK_, 7 Février 2005
    #11
Statut de la discussion:
Fermée.