PHP : ereg - PHP - Programmation
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.
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...)
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
Marsh Posté le 14-02-2003 à 12:33:43
Skylight a écrit : et ce pattern ? }|net|com|gov|mil|org|edu|int) |
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\-]+\.)+
Marsh Posté le 14-02-2003 à 12:36:41
Skylight a écrit : et ce pattern ? }|net|com|gov|mil|org|edu|int) |
Ben vi. Edit : ben non.
Et fectivement, le \ avant le $ ça fausse (encore plus) l'expression !
Marsh Posté le 14-02-2003 à 12:37:06
marchera pas avec les .museum
Edit: et les .info
Marsh Posté le 14-02-2003 à 12:38:22
ReplyMarsh Posté le 14-02-2003 à 12:38:44
gm_superstar a écrit : marchera pas avec les .museum |
Ca existe déjà, les .museum ?
Marsh Posté le 14-02-2003 à 12:40:19
ReplyMarsh 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...
Marsh Posté le 14-02-2003 à 12:48:49
DeliriumTremens a écrit : |
Et les .tribune alors ?
Marsh Posté le 14-02-2003 à 12:49:22
ReplyMarsh Posté le 14-02-2003 à 12:50:52
{2,} alors
Non, {2,6} me parait suffisant. Kadreg, vilain chenapant !
Marsh Posté le 15-02-2003 à 09:29:38
Merci à toi et à tous ceux qui ont participé
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
a+
Marsh Posté le 21-02-2003 à 16:00:56
DeliriumTremens a écrit : |
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 :
|
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+
Marsh Posté le 21-02-2003 à 16:59:21
kileak2 a écrit :
|
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...
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 !
Marsh Posté le 24-02-2003 à 19:20:54
ReplyMarsh 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+
Marsh Posté le 28-06-2003 à 09:44:33
kileak2 a écrit : Salut
|
mon sauveur !!
pareil j ai lu plein du tuto et ct toujours pas clair
merci a ton topic
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 :
J'ai sur php.net trouvé un gars qui explicitait bien tout : (ca peu servir ca )
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