Publié le 09/06/2010
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Verifier le format d'une adresse email

Dans un formulaire, l'internaute saisie une adresse email qui est transmise par en général par les variables $_POST au script PHP. Avant d'insérer l'adresse dans la table MySQL, des tests simples (regex, filtre et DNS lookup) permette de valider la syntaxe de l'email.

3 méthodes pour tester une email en PHP

Directement à partir du serveur, les fonctions PHP permettent de tester une adresse email saisie par un internaute. Les 3 méthodes ont pour but de filtrer les adresses incorrectes sans pour autant avoir la certitude que l'adresse est valide.

Appliquer un filtre sur la syntaxe

Depuis PHP5, la fonction filter_var offre la possibilité de filter des valeurs, y compris les adresses email. La technique est moins gourmande en ressource d'un regex, par contre, aucune idée des tests effectués

<?php
$emailAddress="erreur@frappe.com";
if (is_email_valid_filter($emailAddress)) {
    echo "l'adresse ".$emailAddress. " est valide";
} else {
     echo "Rejet de l'adresse ".$emailAddress;
}
 
function is_email_valid_filter($email) {
    if (filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
        return false;
    } else {
        return true;
    }
}
?>

Vérifier le formatage avec les expressions régulières

La technique vérifie la structure de l'adresse email, à savoir est-ce que les caractères sont alphanumériques et est que le signe @ et le point du domaine sont correctement positionnés.
Note: jesuisun@spammer.com est considéré comme une adresse valide !!!

<?php
$emailAddress="erreur@frappe@com";
if (is_email_valid_regex($emailAddress)) {
    echo "l'adresse ".$emailAddress. " est valide";
} else {
     echo "Rejet de l'adresse ".$emailAddress;
}
 
function is_email_valid_regex($email) {
    if(ereg("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$", $email)) {
        return true;
    } else {
        return false;
    }
}
?>

Tester le nom de domaine

La fonction checkdnsrr recherche l'enregistrement DNS correspondant au domaine. Cette technique vérifie qu'une entrée DNS existe bien pour le nom de domaine de l'adresse email. Si la fonction n'est pas disponible sur la plateforme Apache, la requête est simple à réaliser soi-même avec les sockets
Note: jesuisun@spammer.com est cette fois refusé.

<?php
$emailAddress="jesuisun@spammer.com";
if (is_email_valid_domain($emailAddress)) {
    echo "l'adresse ".$emailAddress. " est valide";
} else {
    echo "Rejet de l'adresse ".$emailAddress;
}
 
function is_email_valid_domain($email) {
    list($user,$domain) = split('@',$email);
    return checkdnsrr($domain,'MX');
}
?>

Conclusion
La validation avec ces 3 techniques permet de réduire fortement les adresses email invalides. Par contre, il est impossible d'en avoir la certitude !!!
En fait, il existe qu'une seule manière de vérifier une adresse email: envoyer un email et demander à l'internaute de valider son adresse par un click ou une autre action.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - script
Mise a jour
09/06/2010
Visualisation
vu 2777 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 267 articles
|BIO_PSEUDO|
Commentaires récents

Publié par olibul dans CMS

var
fn: string;

begin

Result:= False;
if strFont <> \'\' then begin

// Tester le nom: si affectation directe à TFont, modifications aléatoires...

Publié par nicolasterraes dans tuto

bonjour,
je ne comprends pas cette tape:

Les liens vers les feuilles de style et les fichier js sont declares dans les pages HTML. Modifiez les balises meta ainsi:
Feuille de style:
d...

Publié par Tactic Rayan dans java

Merci beaucoup, c'est tres interressent, tres longtemps que j'ai recherche ce code

Publié par Connan dans php5

j'utilise mysql phpmyadmin et j'ai cree une table IP mais j'ai mis varchart(15) mais quese qui faut que je fasse pour stocker l'ip des joueurs qui s'inscrivent

Publié par bakouz dans java

Bonjour Axel,
je suis tombe sur ton site un peu par hasard.
Hasard car je ne le connaissais pas jusqu'a maintenant, et non du hasard car c'est exactement ce genre de class que je recherchais. !...