Télécharger
Noter:

Ajouté le 19/04/2013
Visionné 2183 fois
5/5

Vérifier une adresse mail en PHP

Description

Mise à jour le: 02/04/2020

Ce script simple (quand on sy connait un minimum en expression régulière), permet de vérifier si une adresse mail est correcte, souvent utilisé lors de l'envoi d'un formulaire de contact ou de la création d'un compte membre en PHP

Bug solutionné:

- les adresses avec plusieurs points de suite ne sont plus acceptées
Exemple: mon@email.........com


Nouveautés:

- La regex accepte désormais les adresses mail avec ou sans points, comme "mon.email@domaine.tld" ou "mon.email.avec.points@mon.domaine.tld"

- Optimisation avec ajout du marqueur "i" qui indique "insensible à casse", les adresses avec majuscules et minuscules sont acceptées (mOn@Email.com), pensez à les passer à strtolower() ensuite

Petite parenthèse

Je vous met des sites sympas pour apprendre les expressions régulière en PHP, des sites pratiques à garder sous le coude!:

https://lumadis.be/regex/tuto_pcre.php (Tutoriel Expressions régulières PCRE)
http://www.expreg.com/symbole.php (Expreg.com)


Explications:


Intéressons-nous a preg_match (regex - regular expressions)
preg_match("#^[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?@[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?\.[a-z]{2,30}$#i",$chaine);

le ^ du début permet de vérifier que la chaine commence par ce qu'on demande ensuite, soit: [a-z0-9_-], ce qui veut dire que le début de l'adresse mail peut commencer par des lettres minuscules et/ou majuscules (Option de recherche: i qui permet de rechercher des caractères minuscules ou majuscules) avec des chiffres, un underscore et/ou un tiret.

Au cas où le mail serait constitué d'un ou plusieurs points (ex: mon.super@e.mail.com), on inspecte avec ? (point d'interogation) (veut dire: "peut être répété et peut ne pas y être aussi") ceux qu'il y a entre parenthèses: ((\.[a-z0-9_-]+){1,})?
En gros cela veut dir: ".duTexteEtDesChiffresAvec_et-" qui peut se répéter à l'infini grâce à {1,} qui veut dire "1 fois ou plus".

Ensuite on vérifie si il y a le fameux arobase @

on revérifie si la continuité du mail contient là encore des chiffres et/ou des lettres et/ou un tiret et/ou un underscore (avec [a-z0-9_-]), vous remarquerez la présence d'un signe + (plus) après notre classe [a-z0-9_-], cela signifie qu'il faut au moins 1 caractère ou plusieurs, par exemple: a@a.aa fonctionnera mais @a.aa ne fonctionnera pas.

Ensuite, nous avons un anti-slash suivi d'un point: ., cela signifie que nous voulons un point (.), il faut l'échapper avec un \ car le point est un métacaractères et sans le \ il veut dire "tous les caractères".

Et pour finir, la dernière classe [a-z] suivie de {2,} qui permet de vérifier la présence d'une chaine de lettres d'une longueur minimum de 2 à 30 (Cette partie sera l'extension du nom de domaine de l'adresse mail, par exemple: fr, com, net, xyz...).
J'ai mis 2,30 car il existe maintenant des extensions de nom de domaine extravagants dont on ne sais pas jusqu'à combien de caractères ils vont s'arrêter!

à ne pas oublier le signe dollar ($) qui dit "la chaine doit se terminer ainsi" et ne rien avoir d'autre après.

$chaine = "nom.prenom@email.com";
if(!preg_match("#^[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?@[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?\.[a-z]{2,30}$#i",$chaine)) {
echo "Le mail est incorrect !";
} else {
echo "Le mail est correct !";
}


On peut également en faire une fonction:
function verifmail($mail){
if(preg_match("#^[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?@[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?\.[a-z]{2,30}$#i",$mail)) {
return true;
} else {
return false;
}
}
if(!verifmail("le@mail.com")) {
echo "Le mail est incorrect !";
} else {
echo "Le mail est correct !";
}

Commentaires

Daft le 26 Décembre 2013 à 14:03

Merci pour ton script

Ajouter un commentaire

Pseudo/Nom *
Email *
Message *
La balise [code]Votre code...[/code] peut être utilisée

Captcha * memo1memo2

Les champs marqués d'un * sont obligatoires.

Retour à la liste des scripts

Flag Counter