Quelle est une bonne technique pour valider une adresse e-mail (par exemple à partir d'un champ de saisie utilisateur) dans Android? org.apache.commons.validator.routines.EmailValidator ne semble pas être disponible. Y a-t-il d'autres bibliothèques qui font déjà partie d'Android ou devrais-je utiliser RegExp?
Réponses
Trop de publicités?Une autre option est les modèles intégrés à partir de l'API Niveau 8:
public final static boolean isValidEmail(CharSequence target) {
if (TextUtils.isEmpty(target)) {
return false;
} else {
return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}
}
OU
Une solution en ligne de @AdamvandenHoven:
public final static boolean isValidEmail(CharSequence target) {
return !TextUtils.isEmpty(target) && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}
Le modèle suivant est utilisé dans le courrier K-9:
public final Pattern EMAIL_ADDRESS_PATTERN = Pattern.compile(
"[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
"\\@" +
"[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +
"(" +
"\\." +
"[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
")+"
);
Vous pouvez donc utiliser la fonction
private boolean checkEmail(String email) {
return EMAIL_ADDRESS_PATTERN.matcher(email).matches();
}
Depuis API 8 (android 2.2) il y a un modèle: android.util.Les schémas.EMAIL_ADDRESS http://developer.android.com/reference/android/util/Patterns.html
De sorte que vous pouvez l'utiliser pour valider yourEmailString:
private boolean validEmail(String email) {
Pattern pattern = Patterns.EMAIL_ADDRESS;
return pattern.matcher(email).matches();
}
retourne true si l'email est valide
UPD: Ce modèle code source est:
public static final Pattern EMAIL_ADDRESS
= Pattern.compile(
"[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
"\\@" +
"[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +
"(" +
"\\." +
"[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
")+"
);
reportez-vous à: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/util/Patterns.java
De sorte que vous pouvez construire vous-même pour la compatibilité avec les API < 8.
N'utilisez pas un reg-ex.
Apparemment, le suivant est un reg-ex qui valide correctement la plupart des e-mails à des adresses qui sont conformes à la RFC 2822, (et échouera toujours sur des choses comme "user@gmail.com.nospam" comme il en sera de org.apache.commons.programme de validation.routines.EmailValidator)
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
Probablement la façon la plus simple pour valider une adresse e-mail pour envoyer un e-mail de confirmation à l'adresse fournie et il rebondit alors il n'est pas valide.
Si vous souhaitez effectuer quelques vérifications de base, vous pourriez simplement que c'est dans la forme *@*
Si vous avez un peu de logique métier spécifique de validation puis vous pouvez effectuer qu'à l'aide d'une expression régulière, par exemple, doit être un gmail.com compte ou quelque chose.
Vous pouvez utiliser l'expression régulière pour le faire. Quelque chose comme le suivant.
Pattern pattern = Pattern.compile(".+@.+\\.[a-z]+");
String email = "xyz@xyzdomain.com";
Matcher matcher = pattern.matcher(email);
boolean matchFound = matcher.matches();
Note: Vérifiez l'expression régulière donnée ci-dessus, ne l'utilisez pas telle quelle.