Comment vérifier le format d'une adresse mail en PHP ?

Réponses rédigées par Antoine
Dernière mise à jour : 2018-08-27 14:14:39
Thèmes : php - script - mail - webmaster
Question

Comment puis-je vérifier qu'une adresse mail est correctement formatée en PHP ?

Réponse

Il existe plusieurs méthodes pour vérifier le format d'une adresse mail.

Vous pouvez tout d'abord utiliser les expressions régulières (REGEX) pour valider et vérifier la bonne forme d'une adresse e mail.

Remarque : Cela ne permet pas de vérifier que l'adresse existe, mais seulement de vérifier qu'elle se compose d'une chaine de caractères correcte.

function check_email_address($email) { 
    return (!preg_match( "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$^", $email)) ? false : true; 
} 

Voici comment utiliser cette fonction :

$email = "test@test.com";
if (check_email_address($email) == false){echo "incorrect";}
else echo "correct";

Vous pouvez également utiliser une fonction native proposée par PHP.

Il s'agit de la fonction filter_var() qui filtre une variable avec un filtre spécifique. Le filtre qui doit être utilisé pour vérifier une adresse mail est FILTER_VALIDATE_EMAIL.

$email = "test@test.com";

if (filter_var($email, FILTER_VALIDATE_EMAIL)) 
{
echo "correct";
}
else
{
echo "incorrect";
}

Remarque : Le filtre FILTER_VALIDATE_EMAIL valide l'adresse e-mail selon la syntaxe défini par la RFC 822, à l'exception des commentaires et du remplissage par des espaces qui ne sont pas supportés, ce qui peut permettre de by-pass cette fonction. Préférez donc une solution du type REGEX à filter_var().

Réponse

Vous pouvez également contrôler le format d'une adresse mail, coté client.

L'attribut PATTERN d'un INPUT d'un formulaire en HTML5 peut être utilisé pour vérifier la bonne forme d'une adresse mail. Pour ce faire on utilise une expression régulière, une REGEX.

Voici le PATTERN correspondant :

pattern="^(([-\w\d]+)(\.[-\w\d]+)*@([-\w\d]+)(\.[-\w\d]+)*(\.([a-zA-Z]{2,5}|[\d]{1,3})){1,2})$"

Exemple (si vous saisissez autre chose que les caractères autorisés par la REGEX votre navigateur retourne une erreur) :

<form id="monFormulaire" method='post' action='#' role="form">
<input name="mail" id="mail"  value="" 
required="required" aria-required="true" 
pattern="^(([-\w\d]+)(\.[-\w\d]+)*@([-\w\d]+)(\.[-\w\d]+)*(\.([a-zA-Z]{2,5}|[\d]{1,3})){1,2})$"
title="Votre adresse mail"
type="text" spellcheck="false" style="width:50%;" />
<input type="submit" value="Envoyer" />
</form>

Remarque : Avec cette REGEX la vérification de l'adresse mail s’effectue coté client mais pour des raisons de sécurité vous devez également effectuer le contrôle coté serveur, en PHP.