Vérifier un format d'adresse e-mail par regex
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
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é ...
++
1. Par Mickaël Wolff le 19/11/2007 11:45