PHP : ereg

PHP : ereg - PHP - Programmation

Marsh Posté le 14-02-2003 à 11:45:13    

Salut
 
j'ai bien tout lu ds le FM :) mais je suis un peu sec.
 
J'ai un ereg pour checker un email :
 

Code :
  1. <?
  2. $address = "toto@titi.com" ;
  3. $input = "^[^@  ]+@([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9\-]{2}|net|com|gov|mil|org|edu|int)\$" ;
  4. if(ereg( $input,$address) )
  5. echo $address." OK !" ;
  6. else
  7. echo $address." KO :((" ;
  8. ?>


 
J'ai sur php.net trouvé un gars qui explicitait bien tout : (ca peu servir ca :) )
 

Citation :

I must've read 50 regular expression tutorials and understood nothing from each. I finally worked them out through playing around and looking at other people's examples. I wrote this to summarise and clarify things. I find it helps as a quick lookup reference:
 
^                Start of String
$                End of string
 
n*               Zero or more of 'n'
n+               One or more of 'n'
n?               A possible 'n'
 
n{2}             Exactly two of 'n'
n{2,}           At least 2 or more of 'n'
n{2,4}           From 2 to 4 of 'n'
 
()               Parenthesis to group expressions
(n|a)          Either 'n' or 'a'
 
.                Any single character
 
[1-6]            A number between 1 and 6
[c-h]          A lower case character between c and h
[D-M]            An upper case character between D and M
[^a-z]           Absence of lower case a to z
[_a-zA-Z]        An underscore or any letter of the alphabet
 
^.{2}[a-z]{1,2}_?[0-9]*([1-6]|[a-f])[^1-9]{2}a+$
 
A string beginning with any two characters
Followed by either 1 or 2 lower case alphabet letters
Followed by an optional underscore
Followed by zero or more digits
Followed by either a number between 1 and 6 or a character between a and f (Lowercase)
Followed by a two characters which are not digits between 1 and 9
Followed by one or more n characters at the end of a string


 
C'est excellent, ca marche mais je ne comprends pas un truc dans ^[^@  ]+@([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9\-]{2}|net|com|gov|mil|org|edu|int)\$
 
les \ servent à koi ? je sais bien que c le caractère d'échappement mais je vois pas leur intérêt là. (surtout le dernier avt le $.
 
De plus, il semble que [^@  ]+@ signifie, 1 ou n caractères avt le @ mais PAS : @ et '2 espaces'? c ca ?
 
Merci
a+
 
edit : j'ai même fait un test ss ces caractères d'échappement et ca fonctionne nickel dc je vois vraiment pas...


Message édité par kileak2 le 14-02-2003 à 11:46:34
Reply

Marsh Posté le 14-02-2003 à 11:45:13   

Reply

Marsh Posté le 14-02-2003 à 11:59:16    

ok donc si je mets truc@wanadoo.fr ca marchera pas ;)

Reply

Marsh Posté le 14-02-2003 à 12:11:43    

Explication du \  
 
(source : http://www.asp-php.net/tutorial/asp-php/regexp.php excellente adresse au par ailleurs)
 
\ Marque le caractère suivant comme caractère spécial ou littéral.
Par exemple, "n" correspond au caractère "n". "\n" correspond à un caractère de nouvelle ligne. La séquence "\\" correspond à "\", tandis que "\(" correspond à "(".
 
 
Donc il me paraît utile dans le cas où il est avant le . puisque dans une expression régulière, le point correpond à tout caractère unique (alors que là on veut détecter un "." )
 
Devant les - je suis pas sûr que ça soit indispensable, mais comme il est utilisé dans la syntaxe des expressions (0-9 par exemple), il est peut-être utile de le faire précéder par un \
 
Avant le $ final, ça me paraît vraiment inutile (voir faux)
 
^=début de la saisie
[^@  ]+@  signifie qu'on peut avoir tous les caractères possibles sauf @ et "espace"(?) répétés une ou plusieurs fois (ça s'est l'explication jusqu'au + compris) puis un @
 
Ce qui me fait dire que ton expression régulière est pas parfaite pour tester des mails (tous les caractères ne sont pas admis dans une adresse mail avant le @, nan ?)
 
J'utilise (c'est pour de l'ASP mais ça reste la même chose, si je ne m'abuse) celle proposée sur asp-php.net
 
expression="^([a-zA-Z0-9]+(([\.\-\_]?[a-zA-Z0-9]+)+)?)\@(([a-zA-Z0-9]+[\.\-\_])+[a-zA-Z]{2,4})$"
 
Elle me paraît plus claire et plus complète.
 
Et finalement, c'est le genre de test qu'il est plus raisonnable de faire côté client, donc en javascript.  
 
Mais là n'était pas la question.


Message édité par deliriumtremens le 14-02-2003 à 12:15:31
Reply

Marsh Posté le 14-02-2003 à 12:14:36    

Skylight a écrit :

ok donc si je mets truc@wanadoo.fr ca marchera pas ;)


 
et le
 
+([a-zA-Z0-9\-]{2}
 
c'est pour les cochons ? ;)
 
(Mais là encore, c'est mal foutu : le 0-9 et le \- sont pas admis dans une adresse mail...)

Reply

Marsh Posté le 14-02-2003 à 12:26:54    

et ce pattern ? }|net|com|gov|mil|org|edu|int)
 
 
 
donc les .fr.st sont bannis ..
 
enfin c'est bien le bordel cette regex, ya + simple

Reply

Marsh Posté le 14-02-2003 à 12:33:43    

Skylight a écrit :

et ce pattern ? }|net|com|gov|mil|org|edu|int)
 
 
 
donc les .fr.st sont bannis ..
 
enfin c'est bien le bordel cette regex, ya + simple


:heink: Ben non, si tu regardes toute la fin de la regexp : ([a-zA-Z0-9\-]{2}|net|com|gov|mil|org|edu|int)
En gros on accepte une extension de 2 lettres quelconques, ou une extension de 3 lettres parmi celles qui sont citées
Le ".fr" de ".fr.st" sera matché dans la partie précédente, à savoir ([a-zA-Z0-9\-]+\.)+

Reply

Marsh Posté le 14-02-2003 à 12:36:41    

Skylight a écrit :

et ce pattern ? }|net|com|gov|mil|org|edu|int)
 
 
 
donc les .fr.st sont bannis ..
 
enfin c'est bien le bordel cette regex, ya + simple


 
 
Ben vi. Edit : ben non.
 
Et fectivement, le \ avant le $ ça fausse (encore plus) l'expression !
 


Message édité par deliriumtremens le 14-02-2003 à 12:37:45
Reply

Marsh Posté le 14-02-2003 à 12:37:06    

marchera pas avec les .museum :/
 
Edit: et les .info


Message édité par gm_superstar le 14-02-2003 à 12:37:21

---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
Reply

Marsh Posté le 14-02-2003 à 12:38:22    

gm_superstar a écrit :

marchera pas avec les .museum :/
 
Edit: et les .info


... et les .biz

Reply

Marsh Posté le 14-02-2003 à 12:38:44    

gm_superstar a écrit :

marchera pas avec les .museum :/
 
Edit: et les .info


 
Ca existe déjà, les .museum ?

Reply

Marsh Posté le 14-02-2003 à 12:38:44   

Reply

Marsh Posté le 14-02-2003 à 12:42:59    

Fichtre.
 
Alors le regexp que j'ai proposé est en retard.
 
Moi aussi.
 
donc {2,6}
 
Que ce monde évolue... [:deliriumtremens]

Reply

Marsh Posté le 14-02-2003 à 12:48:49    


 
Et les .tribune alors ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 14-02-2003 à 12:49:22    

kadreg a écrit :


 
Et les .tribune alors ?


{2, 100}
 
et je suis tranquille pour quelques années :kaola:

Reply

Marsh Posté le 14-02-2003 à 12:50:52    

{2,} alors ;)
 
Non, {2,6} me parait suffisant. Kadreg, vilain chenapant !


---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
Reply

Marsh Posté le 15-02-2003 à 09:29:38    


 
Merci à toi et à tous ceux qui ont participé  :jap:  
 
Je suis rassuré de voir que ce script est un peu vérolé car je commencais à me dire que j'y pigeais plus rien !
 
asp-php.net : je suis un ingrat ! Venant de l'ASP j'avais commencé à apprendre PHP sur ce site et j'y suis même pas aller voir :)
 
 :jap:  :hello:  
a+

Reply

Marsh Posté le 21-02-2003 à 16:00:56    

DeliriumTremens a écrit :


 
et le
 
+([a-zA-Z0-9\-]{2}
 
c'est pour les cochons ? ;)
 
(Mais là encore, c'est mal foutu : le 0-9 et le \- sont pas admis dans une adresse mail...)


 
salut
 
j'ai finalement opté pour ta RegEx, trouvée sur asp-php.net.
 
Je l'ai adapté en JavaScript avec un string.match(email) (voir un autre topic sur ce forum : aucun prob.
 
Par contre, et là j'hallucine, ca ne marche pas bien en PHP !
 
Dans kel cas ? : sur les emails avec des '-'.
 
Mon code :
 
 

Code :
  1. <?
  2. function checkEmail($e){
  3.   $re = "^([a-zA-Z0-9]+(([\.\-\_]?[a-zA-Z0-9]+)+)?)\@(([a-zA-Z0-9]+[\.\-\_])+[a-zA-Z]{2,4})$" ;
  4.  
  5.   if(ereg($re,$e))
  6. return '<b>OK</b>' ;
  7.   else
  8. return '<b>KO</b>' ;
  9. }
  10. $mail = "toto@ti-ti.com";
  11. $retour = checkEmail($mail) ;
  12. echo($mail." est ".checkEmail($mail)) ;
  13. ?>


 
Reponse : toto.... est KO !!
 
En JS : pas de prob !
Pour les emails sans '-' no prob !
 
Là je suis vraiment sec de chez sec !
 
merci
a+

Reply

Marsh Posté le 21-02-2003 à 16:59:21    

kileak2 a écrit :


 

Code :
  1. <?
  2. $re = "^([a-zA-Z0-9]+(([\.\-\_]?[a-zA-Z0-9]+)+)?)\@(([a-zA-Z0-9]+[\.\-\_])+[a-zA-Z]{2,4})$" ;
  3. ?>


 


 
Bon j'ai trouvé une parade mais je comprends et j'aimerais bien comprendre !
 
j'ai dû changer la partie de ma RegEx qui teste les .-_ :
 
[-._]? Ici l'ordre est important car [.-_]? aurait interprété le - comme séparateur genre [A-Z].
 
Dc en mettant -._ avec - en 1er ca marche !
 
Je ne comprends pas pkoi le \ ne jouait pas son rôle d'échappement ????
D'autant que cette RegEx est connue et marche en JS !
 
Mystère...

Reply

Marsh Posté le 22-02-2003 à 16:23:26    

[:drapo]

Reply

Marsh Posté le 24-02-2003 à 08:44:05    

Reply

Marsh Posté le 24-02-2003 à 10:21:05    

Mystère, effectivement.
 
La RegExp marche sans problème en ASP.
 
toto@ti-ti.com est considéré comme une adresse valide sans faire de changement !

Reply

Marsh Posté le 24-02-2003 à 19:20:54    

j'ai bien aimé l'explication que tu as trouvé :)

Reply

Marsh Posté le 24-02-2003 à 20:52:42    

forummp3 a écrit :

j'ai bien aimé l'explication que tu as trouvé :)


 
c ironique je pense :)
 
c à marcher sur la tête ce truc. Si tu as une bonne explication tu es le bien venu :)
 
a+

Reply

Marsh Posté le 28-06-2003 à 09:44:33    

kileak2 a écrit :

Salut
 
j'ai bien tout lu ds le FM :) mais je suis un peu sec.
 
J'ai un ereg pour checker un email :
 

Code :
  1. <?
  2. $address = "toto@titi.com" ;
  3. $input = "^[^@  ]+@([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9\-]{2}|net|com|gov|mil|org|edu|int)\$" ;
  4. if(ereg( $input,$address) )
  5. echo $address." OK !" ;
  6. else
  7. echo $address." KO :((" ;
  8. ?>


 
J'ai sur php.net trouvé un gars qui explicitait bien tout : (ca peu servir ca :) )
 

Citation :

I must've read 50 regular expression tutorials and understood nothing from each. I finally worked them out through playing around and looking at other people's examples. I wrote this to summarise and clarify things. I find it helps as a quick lookup reference:
 
^                Start of String
$                End of string
 
n*               Zero or more of 'n'
n+               One or more of 'n'
n?               A possible 'n'
 
n{2}             Exactly two of 'n'
n{2,}           At least 2 or more of 'n'
n{2,4}           From 2 to 4 of 'n'
 
()               Parenthesis to group expressions
(n|a)          Either 'n' or 'a'
 
.                Any single character
 
[1-6]            A number between 1 and 6
[c-h]          A lower case character between c and h
[D-M]            An upper case character between D and M
[^a-z]           Absence of lower case a to z
[_a-zA-Z]        An underscore or any letter of the alphabet
 
^.{2}[a-z]{1,2}_?[0-9]*([1-6]|[a-f])[^1-9]{2}a+$
 
A string beginning with any two characters
Followed by either 1 or 2 lower case alphabet letters
Followed by an optional underscore
Followed by zero or more digits
Followed by either a number between 1 and 6 or a character between a and f (Lowercase)
Followed by a two characters which are not digits between 1 and 9
Followed by one or more n characters at the end of a string


 
C'est excellent, ca marche mais je ne comprends pas un truc dans ^[^@  ]+@([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9\-]{2}|net|com|gov|mil|org|edu|int)\$
 
les \ servent à koi ? je sais bien que c le caractère d'échappement mais je vois pas leur intérêt là. (surtout le dernier avt le $.
 
De plus, il semble que [^@  ]+@ signifie, 1 ou n caractères avt le @ mais PAS : @ et '2 espaces'? c ca ?
 
Merci
a+
 
edit : j'ai même fait un test ss ces caractères d'échappement et ca fonctionne nickel dc je vois vraiment pas...


mon sauveur !!
pareil j ai lu plein du tuto et ct toujours pas clair
merci a ton topic  :jap:


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed