L’une des demandes d’extraits de code les plus fréquentes que je reçois concerne une fonction permettant de valider les adresses électroniques. Bien que cela semble facile, je repousse depuis un moment le moment d’écrire sur ce sujet. La raison en est qu’il y a pas de grandes solutions à ce genre de problème.
En théorie, les adresses électroniques peuvent être validées à l’aide d’une expression régulière. Après tout, il existe quelques règles simples, telles que la présence de l’arobase (@
) et d’un domaine approprié, n’est-ce pas ? Oui, mais il existe des tonnes d’adresses électroniques valides qui ne ressemblent pas exactement à cela. En fait, il existe une norme entière, la RFC 2822, qui définit ce à quoi les adresses électroniques peuvent ressembler. Ensuite, il y a le problème de ce que les différents serveurs de messagerie autorisent. Gmail, par exemple, n’autorise pas les caractères de soulignement (_
) ou plus d’un point (.
) à la suite.
De plus, même si vous pouviez valider une adresse e-mail, il n’y a pas d’autre solution que de l’utiliser. aucun moyen de savoir si cette adresse est en fait actuellement utilisée.. La seule façon de le faire est d’envoyer un courrier électronique et de vérifier la réponse. C’est la raison pour laquelle la plupart des sites web et des applications vous envoient aujourd’hui un e-mail de confirmation en premier lieu.
Enfin, même si vous utilisiez une expression régulière conforme à la RFC 2822, cela ne serait pas sans poser problème. Il serait assez difficile de comprendre comment elle fonctionne ou de déterminer si elle fonctionne correctement dans chaque cas. Mais plus important encore, elle pourrait être sujette à attaques par déni de service par expression régulière (ReDoS)si elles sont mises en œuvre de manière incorrecte.
Vous devriez maintenant commencer à comprendre pourquoi j’ai hésité à présenter une solution au problème de la validation des e-mails. Bien que des solutions existent, les implications de chacune d’entre elles doivent être examinées avec soin.
Ma suggestion serait la suivante vérifier les éléments structurels de base sur le front-end, puis envoyer un email de confirmation à partir de votre serveur pour vérifier que l’adresse électronique est bien utilisée. C’est facile à mettre en œuvre et cela fait l’affaire. Pour revenir à l’idée de départ, voici une fonction simple qui vérifie les erreurs de syntaxe les plus courantes.
const isEmailValid = address => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(address);
isEmailValid('abcd@site.com');
isEmailValid('ab_c@site.com');
isEmailValid('ab.c@site.com');
isEmailValid('a@my.site.com');
isEmailValid('ab c@site.com');
isEmailValid('ab@c@site.com');
isEmailValid('abcde@sitecom');
isEmailValid('abcdesite.com');
Cette expression régulière est assez courte, mais elle valide les conditions suivantes :
- Aucun caractère d’espacement dans l’adresse électronique
- Présence d’un seul at (
@
) avant la partie de domaine - Au moins un point (
.
) dans la partie du domaine