Valider une adresse email avec javascript

Plutôt que d'utiliser une expression régulière, j'ai préféré utiliser la fonction lastIndexOf et faire quelques vérifications.


function EmailValidate(aStr){
	var s = aStr.trim();
	var arobase = s.lastIndexOf("@");
	var point = s.lastIndexOf(".");
	return (arobase > 0 && arobase < point - 1 && point < s.length - 1 && arobase > s.indexOf('..') && !/\s/g.test(s));
}

La fonction cherche le dernier arobase et le dernier point, elle effectue ensuite une courte liste de vérification :

  • le dernier arobase est présent et n'est pas le premier caractère.
  • Le dernier arobase n'est pas à côté du dernier point (il y a un nom de domaine)
  • Le dernier point n'est pas placé à la fin du string.
  • Il n'y a pas de double point après le dernier arobase
  • Il n'y a pas d'espace, tabulation etc

Quelques exemples de validation d'emails


EmailValidate(' test@test.fr');
// true
EmailValidate('te.st@test.fr');
// true
EmailValidate('te.st@te.st.fr');
// true
EmailValidate('te+st@test.fr');
// true
EmailValidate('üñîçøðé@test.fr');
// true
EmailValidate('#!$%&\'*+-/=?^_`{}|~@test.fr');
// true
EmailValidate('test.fr');
// false
EmailValidate('@test.fr');
// false
EmailValidate('test@.fr');
// false
EmailValidate('test@.test.fr');
// false
EmailValidate('test@test..fr');
// false

Limitations

Cette fonction est très simple et si elle validera la majorité des adresses, elle ne validera pas certain cas pourtant existant :

  • " "@test.fr
  • "exemple\\ \"très\"bizarre"@test.fr
  • user@localserver

À l'inverse elle validera des cas qui ne le devraient pas l'être (ça fera l'objet d'une mise à jour) :

  • te@st@test.fr (il est possible d'avoir un @ mais uniquement entre des quotes "te@st"@test.fr)

A vous de l'adapter selon vos besoins. L'idée est avant tout d'aider les utilisateurs à corriger une faute de frappes. Pour une véritable validation il n'existe qu'un moyen fiable : envoyer un email de test.