Steve TENZA
Intervient pour votre site internet
Facebook Me contacter Cookie
Télécharger
Noter:
5/5 (4)
Ajouté/Modifié le 2023-10-28
Visionné 7821 fois

Vérifier une adresse mail en PHP

Description

Ce script est un outil essentiel pour maintenir la qualité et la fiabilité des données collectées au sein de votre application web.

Son utilité se manifeste fréquemment lors de la conception de formulaires de contact ou de la mise en place de systèmes d'inscription de membres en PHP. La vérification de la validité d'une adresse e-mail revêt une grande importance, car elle permet de s'assurer que l'utilisateur a correctement renseigné ce champ du formulaire. Un e-mail valide est essentiel pour établir une communication efficace et s'assurer que les informations sont correctement acheminées vers les destinataires. En somme, ce script, bien que considéré comme relativement simple pour ceux ayant une certaine familiarité avec les expressions régulières, joue un rôle essentiel dans le processus de validation des adresses e-mail.


Petite parenthèse

Je vous mets un site sympa pour valider/tester les expressions régulière en PHP, site pratique à garder sous le coude !

regex101
https://regex101.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’interrogation) (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 dire : ".duTexteEtDesChiffresAvec_et-" qui peut se répéter à l'infini grâce à {1,} qui veut dire "1 fois ou plus".

Ensuite on vérifie s'il y a la fameuse 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 sait 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 optimiser l'écriture en remplaçant [a-z0-9_-] par [-\w], \w étant égal à "0-9a-z_" (j'ai gardé [a-z0-9_-] pour l'exemple car c'est plus simple à comprendre)

//encore plus compliquée à comprendre quand on est novice, l'écrire avec une référence arrière pour éviter de réécrire les classes (\1 fait référence à "((\.[-\w]+){1,})")
preg_match("#^[-\w]+((\.[-\w]+){1,})?@[-\w]+\1?\.[a-z]{2,}$#i",$chaine)
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 !";
}
Bug solutionné:

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


Nouveautés:

- La regex accepte désormais les adresses mail avec ou sans points, comme "monemail@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

J'espère que ce script gratuit vous est utile.
Pour soutenir mon travail, un simple don ou mettre une note est grandement apprécié.
Votre réussite en ligne commence ici

Vous cherchez à pousser encore plus loin vos idées ou à les concrétiser avec un site internet sur mesure ? Je suis là pour vous aider ! Mon expérience en développement web est à votre disposition.

Que ce soit la création de votre site web pro ou l'apport de fonctionnalités avancées à votre projet, contactez-moi pour en discuter et avoir un devis gratuit personnalisé.

Mon objectif est de vous offrir des solutions sur mesure qui répondent à vos besoins, et votre vision associée à mon expertise donnera vie à votre projet web parfait. Contactez-moi aujourd'hui, je réponds en général en moins d'une heure :

Demander un devis
Réponse rapide !

Vous recherchez un script précis ?

Dites-moi ce dont vous avez besoin, je peux développer le script demandé et vous envoyer un mail dès qu'il est dispo !

🔔 Vous pouvez laisser votre mail pour recevoir les nouveaux scripts. Pas de pub, pas de tracas. Vous êtes libre de le supprimer à tout moment.

Je prends en compte toutes les demandes. Les idées les plus populaires passent en priorité et seront publiées dès qu'elles seront prêtes. 2877 demandes reçues.

Si vous avez un projet en tête, je vous suggère de me contacter directement pour en discuter.

Commentaires

Ajouter un commentaire

Commenter
Pseudo/Nom
Email
Message
Captcha
memo1
Commenter

Daft le 26 Décembre 2013 à 14:03

Merci pour ton script

moi le 25 Mai 2023 à 10:58

Sinon, <input type='email'> fonctionne très bien aussi...

admin le 25 Mai 2023 à 11:00

Côté HTML (client) seulement, côté serveur, il vous faut faire la vérification de ce qu'à saisie l'utilisateur pour éviter tout problèmes ! ;)

Yvan Duchitte le 12 Juin 2024 à 14:03

Je pourrais avoir des conseils sur les points svp

admin le 12 Juin 2024 à 14:04

Bonjour, quels conseils souhaitez-vous avoir ?

Retour à la liste des scripts

Un site à créer ?
Contactez-moi