Syntaxe de la fonction ereg()
Résolu
tonguim
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour,
quelqu'un peut il m'expliquer cette syntaxe:
quelqu'un peut il m'expliquer cette syntaxe:
ereg('^.+@.+\\..+$', $_POST['txtemail1'])? Je voudrais surtout comprendre cette partie
^.+@.+\\..+$Merci.
A voir également:
- Syntaxe de la fonction ereg()
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
3 réponses
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
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
^ = 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
.+= 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
Merci mamiemando pour ton explication.
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
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