Dicton du 19 Juillet:
À la Saint-Arsène, met au sec tes graines.

Télécharger
Noter:

Ajouté le 19/04/2013
Visionné 1766 fois

Vérifier une adresse mail en PHP

Description

Mise à jour le 15/11/2018

Bug solutionné:

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


Nouveauté:

- 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



Ce script simple, utilisant l'expression régulière permet de vérifier si une adresse mail est correcte, souvent utilisé lors de l'envoi d'un formulaire.

Explications:


intéressons-nous au preg_match (regex - regular expressions)

Code source (PHP)

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.

Code source (PHP)

<?php
$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:

Code source (PHP)

<?php
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

Merci pour ton script

Ajouter un commentaire

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


ATTENTION! Ce formulaire est exclusivement réservé aux commentaires
Pour toutes demandes d'aide, veuillez ajouter votre demande sur le forum svp

Captcha * quatre + 8 =

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

Retour à la liste des scripts

Flag Counter