340 votes

Comment dois-je valider une adresse e-mail?

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?

1087voto

mindriot Points 4318

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();
  }
}
 

Patterns source visible

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();
}
 

105voto

Andrei Buneyeu Points 2812

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();
}
 

70voto

Luten Points 861

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.

49voto

Glen Points 13521

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.

11voto

Mudassir Points 8017

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X