Syntaxe de la fonction ereg()

Résolu
tonguim -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour,

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

3 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    ^ = 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
  3. tonguim
     
    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