[Devel] r238 - trunk

David MENTRE dmentre at linux-france.org
Ven 2 Fév 09:08:41 CET 2007


Salut Thomas,

2007/2/1, svn at agendadulibre.org <svn at agendadulibre.org>:
>    if (! ereg("^([A-Za-z0-9_\.\-]*)@([A-Za-z0-9_\-]*)\.([A-Za-z0-9_\.\-]*)$", $contact))

Tiens, j'avais jamais relu cette partie de code mais je suis quasiment
sur que tu peux avoir un `+' en partie gauche du @ (le nom de compte),
par exemple dmentre+adl at . C'est utilisé notamment pour faire des
filtres propres à l'utilisateur (tous les emails dmentre+machin vont
au compte dmentre).

Par ailleurs, dans les énumerations de caractères ([...]), tu peux ne
pas backquoter le tiret `-' si tu le mets en premier. Idem pour le
point `.', pas la peine de le backquoter. En tout cas, en Perl c'est
comme ça.

Je viens de vérifier, la page
http://fr.php.net/manual/fr/ref.regex.php dit qu'il faut suivre la
page de man de regex.7 qui dit notamment :
 http://www.tin.org/bin/man.cgi?section=7&topic=regex
       To include a literal `]' in the list, make it the first character (fol-
       lowing a possible `^').  To include a literal `-', make it the first or
       last  character,  or  the second endpoint of a range.  To use a literal
       `-' as the first endpoint of a range, enclose it in `[.'  and  `.]'  to
       make  it  a collating element (see below).  With the exception of these
       and some combinations using `[' (see next paragraphs), all  other  spe-
       cial  characters, including `\', lose their special significance within
       a bracket expression.

Donc, en particulier, ton `\.' match `\' *et* `.' !

Au final ça donnerait :
  ereg("^([-A-Za-z0-9_+.]*)@([-A-Za-z0-9_]*)\.([-A-Za-z0-9_.]*)$", $contact))

Amicalement,
d.


Plus d'informations sur la liste de diffusion Devel