Page 1 sur 1

regex: limité le nombre de caractères sur un ensemble de cla

Posté : 30 juil. 2007, 14:20
par Davee
Bonjour,

un doute/problem sur une expression régulière.
if (!preg_match ('#([a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$){1,10}#i',$string))
Cette expression vérifie les mails envoyés à la base. Il y a donc toutes les classes que j'ai envellopées dans des parenthèses pour leur donner ensuite un nombre limité de caractères "global", bon là pour la tester j'ai mis entre 1 et 10 chr , juste pour éviter de tester avec des adresses de 40 caractères.

évidemment ça marche pas.

Le doute : je me de mande si ça veut pas dire que je peut répetter jusqu'à dix fois ce que j'ai mis entre parenthèses . ce qui serait idiot vous en conviendrez :)

Sinon comment faire pour donner une limite de chr sur la totalité de l'adresse ??

Merci d'avance.

Posté : 30 juil. 2007, 14:26
par Ryle
J'ai pas regardé très en détail, mais déjà tu as ton "$" qui est mal placé par rapport au nombre d'occurence. Celui-ci, s'il est utilisé, doit toujours être à la fin du pattern et ne peut être soumis à un nombre d'occurence, il est là ou pas, ta chaine peut pas se terminer une à 10 fois ;)

Posté : 30 juil. 2007, 14:30
par d0m
effectivement je crois que tu autorises une répetition écrit comme cela,
pourquoi pas faire tout simplement un autre test après sur la longueur de la chaine?
if( (strlen($string)>taille_max) || (!preg_match ('#([a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$){1,10}#i',$string)) )


Posté : 30 juil. 2007, 14:50
par Davee
il est là ou pas, ta chaine peut pas se terminer une à 10 fois ;)
OUPS C'est un peu trop ma fois. Super zut.
pourquoi pas faire tout simplement un autre test après sur la longueur de la chaine?
oui c'est vrai j'aurais pu faire comme ça (C'est pas faut comme on dit souvent depuis peu)
Mais j'aurais voulu tout avoir dans l'expression.

Alors bon pour palier j'ai contourné un peu en faisant comme suis:
#^[a-z0-9._-]{1,20}+@[a-z0-9._-]{1,20}\.[a-z]{2,4}$#i
C'est pas très académique mais ça à l'air de marcher. J'ai limité le nombre de caractère pour chaque classe. Si ça marche pas je prendrais l'option d0m.

Super Merci.

David.