Regex

Statut
N'est pas ouverte pour d'autres réponses.

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 :)
 

Ezekiel !

Elite
ton '.' ne doit pas etre echappé par hazard ^^?
EDIT: non c'est ton ']' qui doit letre mais ton '[' n'a pas bsoin detre échappé
 

Jereck

Α & Ω
Staff
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é ?
 

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>
 

Jereck

Α & Ω
Staff
Bingo a dit:
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.
Première chose importante à savoir : une regex (= expression régulière) est toujours entourée de caractères spéciaux appelés délimiteurs.
On peut choisir n'importe quel caractère spécial comme délimiteur, et pour éviter de tourner en rond trop longtemps je vais vous en imposer un : le point d'exclamation !
Votre regex se trouve alors entourée de points d'exclamation, comme ceci :
!Ma regex!

Euh, mais à quoi servent les points d'exclamation, puisque de toute façon la regex est entourée par des guillemets dans la fonction PHP ?

Parce que, si on veut, on peut utiliser des options. On ne va pas parler des options tout de suite (on n'en a pas besoin pour commencer), mais sachez que ces options se mettent après le second point d'exlamation, comme ceci :
!Ma regex!Options
(source : site du zero)
 

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)
 

Ezekiel !

Elite
Bingo a dit:
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)
il doit pas les echapper vu qu'il est entouré de [ ] ...
 

Bingo

Beer Addict
Ez3kieL a dit:
il doit pas les echapper vu qu'il est entouré de [ ] ...
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|[].@*#[-])+$!"
 
1er
OP
MbK_

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 ;)
 

Bingo

Beer Addict
MbK_ a dit:
Le truc qui a tout changé, c'est que j'ai demandé que la chaine soit pas plus petite que x caracteres.
Ta première regexp ne fonctionnait qu'avec une chaîne de 1 caractère (pas très pratique).

Bingo a dit:
Avec un + en fin d'expression, ça devrait aller.
C'est donc ça que tu dois faire, car cela équivaut à {1,}.
 
1er
OP
MbK_

MbK_

Etudjant
qd on spécifie pas le nombre de caractere, ca veut dire 1caractere?

ha je savais pas ^^

Merci ;)
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut