Syntaxe de la fonction ereg()

Résolu/Fermé
tonguim - 8 août 2006 à 22:34
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 9 août 2006 à 12:51
Bonjour,

quelqu'un peut il m'expliquer cette syntaxe:
ereg('^.+@.+\\..+$', $_POST['txtemail1'])
? Je voudrais surtout comprendre cette partie
^.+@.+\\..+$
Merci.

3 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
9 août 2006 à 12:51
Salut,

il y a une erreur dans l'interpretation de la regex

\\. = le caractère '.'

en fait le 1er \ permet de voir le 2ème en tant que caractère littéral.

En bref pour faire correspondre un métacaractère dans le sens littéral il faut l'echapper avec un antislash.

\\. veut dire un antislash suit de n'importe quel caractère

Donc \a correspond en ce cas. Mais rT ne correspond pas.

Dans une adresse electronique on ne vois pas souvent le caractère antislash(enfin je n'ai jamais vu).

Voilà un test sur le site https://www16.qth.com/404.htm

1. pour /^.+@.+\\..+$/ je teste tonguim@ya\hoo.fr - résultat ok

2. pour /^.+@.+\\..+$/ je teste tonguim@yahoo.fr - résultat echec

3. pour /^.+@.+\..+$/ je teste tonguim@ya\hoo.fr - résultat ok

4. pour /^.+@.+\..+$/ je teste tonguim@yahoo.fr - résultat ok

Dans le 3ème cas c'est ok à cause de .+ donc \ est reconnu

Il faut comprendre les regex avant de commencer.

Voilà une regex un peu plus précise pour une adresse electronique

/^.+@[^\(\);:,<>\\]+\.[a-zA-Z]{2,4}/

Et ce n'est pas sûr que ça va toujours marcher. Ce n'est pas facile d'imaginer tout les cas

lami20j
1
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
9 août 2006 à 01:40
^ = début de l'expression
.+= au moins un caractère quelconque
@ = le caractère arrobase
.+ = au moins un caractère quelconque
\\. = le caractère '.'
.+ = au moins un caractère quelconque
$ = fin de l'expression

Conclusion : cette expression catche une expression du genre xxxxx@xxxxxxxxx.xx ... une adresse mail quoi ;-)

Le résultat est mis dans la variable POST txtemail

Bonne chance
0
Merci mamiemando pour ton explication.

Le résultat est mis dans la variable POST txtemail ...
Ce que je voudrais plutôt c'est afficher un message d'erreur si l'adresse email1 est incorrecte (abscence du <b>@</b> et du <b>.</b>). Voici mon test:
if(!ereg('^.+@.+\\..+$', $_POST['txtemail1'])) 
{echo "L'adresse email1 est incorrecte";}


Le champ txtemail est le champ qui contient l'adresse email qui a été saisie.

Le problème est que mon test ne fonctionne pas: il m'affiche l'erreur que l'adresse soit bonne ou pas. Comment corriger ce problème? Merci
0