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.