Vérifier un format d'adresse e-mail par regex

Rechercher

Vérifier un format d'adresse e-mail par regex

  • Par Emacs
  • 5 commentaires
  • 6 323 lectures
  • De Yves Maistriaux
  • RSS -  Atom

Il n'est pas rare d'avoir à manipuler des adresses e-mails sur Internet. Le premier besoin que l'on rencontre avec ces données est de pouvoir valider leur format. C'est à dire de vérifier qu'elles soient conformes à un motif particulier. Un moyen d'y arriver est d'avoir recours aux expressions régulières particulièrement puissantes et évoluées en PHP. La fonction qui va suivre a été réalisée à partir d'une regex d'Yves Maistriaux, webmaster du site Expreg.com et référence francophone dans ce domaine.

Portion de code

<?php
  /*******************************************************
  *  Déclaration de la fonction
  *******************************************************/
  /**
   * La fonction vérifie le format d'une adresse e-mail au moyen
   * d'une expression régulière.
   *
   * @author : Hugo HAMON
   * @copyright : Yves Maistriaud (Expreg.com)
   * @param : string $sEmail le format d'adresse email à tester
   * @return : boolean $bCorrect
   */
  function verifierAdresseEmail($sEmail)
  {
    // Variables locales
    $sMotif = '`^[[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-.]?[[:alnum:]])*\.([a-z]{2,4})$`';
    $bCorrect = false;
    // Test du format de l'email
    if(preg_match($sMotif,$sEmail))
    {
      $bCorrect = true;
    }
    // Renvoi du booléen
    return $bCorrect;
  }
  /*******************************************************
  *  Exemple d'appel de la fonction
  *******************************************************/
  if(verifierAdresseEmail('toto.root@mon-serveur.com'))
  {
    echo 'Cette adresse e-mail est correcte !';
  }
  else
  {
    echo 'Cette adresse e-mail est fausse !';
  }
?>

Les commentaires

1. Par Mickaël Wolff le 19/11/2007 11:45

Ta Regex est fausse, elle ne respecte pas les RFC qui vont bien.

"Toto Tartare"@lupusmic.org et Toto+Tartare@lupusmic.org sont des courriels valides par exemple.

http://lupusmic.org/pro/docs/regex.php
http://faqfclphp.free.fr/#rub5.3

2. Par j.ducastel le 03/12/2007 09:56

...Et accessoirement ta fonction renvoie toujours false

P.S. Pourquoi l'envoi de commentaire en ajax ? Parce que ça ne fonctionne pas sous opera par exemple...

3. Par Emacs le 03/12/2007 21:57

Ah mince effectivement... Satané copié / collé

Merci pour la correction

4. Par Francis le 29/01/2008 09:36

Ta fonction vérifie uniquement si l'occurence à une syntaxe correcte.
Il serait intéressant d'y ajouter la fonction checkdnsrr() pour vérifier si le MX est existant ou pas.

5. Par seb le 28/12/2009 00:53

En regardant vite fait les specifications (compliquées) rfc, un if (strlen ($sEmail)>=320 )
{
die('trop long';
}
A noter que j'ai testé le code avec 700 caractères environ sous wamp et le serveur a pété ...

++