Vérifier la validité d’un email avec Java

février 18, 2009

Un jour ou l’autre, à travailler dans le WEB, opn finit par devoir vérifier la validité d’un email. Comme on ne peut pas faire confiance à Javascript ou Flash pour vérifier les données envoyées par le client, il faut impérativement vérifier la validité des adresse mail coté serveur (au pire, vous risquez l’injection SQL). Voivi quelques pistes pour vérifier ces emails sur un serveur J2EE, ou sur n’importe quel conteneur de servlet (Tomcat,Jetty, Glassfish).

La solution de facilité

Voici un moyen simple rapide et à priori efficace d’effectuer cette vérification, à l’aide de la libraire apache “commons-validator”:

public static boolean validateEmailAddress(String votreEmail){
EmailValidator emailValidator = EmailValidator.getInstance();
return emailValidator.isValid(votreEmail);
}

Le fichier jar est disponible à cet endroit: http://commons.apache.org/validator/. A noter que ls utilitaires de validation Apache permettent de valider également les dates, ou encore les numéros de carte bleue, que ce soit en java, ou en javascript!

Prendre le taureau par les cornes, et chercher a implémenter la RFC 2822

C’est une usine à gaz, mais ca a été fait, en listant l’ensemble des tld(top level domains: .com, .net .org, etc) existants. C’est ce qui est réalisé ici:
http://www.velocityreviews.com/forums/t125158-java-email-validator.html

Implémenter sa propre regex simplifiée

On peut également essayer de construire soi-même sa fonction, en écrivant sa regex et en comparant la chaine de caractère à cette expression régulière. Suivre strictement les recommandations de la RFC 2822 est un vrai casse-tête (comme on a pu le voir un peu plus haut), et n’est pas forcément utile car l’email bien que valide n’est peut être pas réellement attribué a une personne !

Je vous conseille donc d’utiliser une regex simple, éprouvée, et testée:

^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$

source: http://www.regular-expressions.info/email.html

Et voici l’implémentation correspondante:

public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Console console = System.console();
if (console == null) {
System.err.println(“Probleme pour récupérer la console.”);
System.exit(1);
}
while (true) {
String a_tester = console.readLine(“Saisissez une adresse email à tester : “);
if(isEmailAdress(a_tester)) {
console.format(“OUI”);
}else{
console.format(“NON”);
}

}
}

public static boolean isEmailAdress(String email){
Pattern p = Pattern.compile(“^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$”);
Matcher m = p.matcher(email.toUpperCase());
return m.matches();
}

}

Attention au caractère d’échappement (doublé dans la syntaxe Java) pour la déclaration du “.” dans la seconde partie de l’email!

Entry Filed under: java. Mots-clefs: , , , .

Leave a Comment

Required

Required, hidden

Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackback this post  |  Subscribe to the comments via RSS Feed


Catégories

Articles récents

Mots-clefs

2.0 java blogosphère admin apache configuration CSS debian desactiver desinstaller démons ECMAScript fluxbb forum gpg GWT httpd.conf IDE IM inetd install installer php+mysql inutiles iphone iphoneOS jabber java javamail Javascript kopete mysql ménage netbeans new Function php phpbb privacité pstree punbb remove daemon serveur dédié services services linux sujet tomcat utf8 xinetd

Méta

Articles les plus consultés