374 Stimmen

Wie sollte ich eine E-Mail-Adresse validieren?

Was ist eine gute Technik für die Validierung einer E-Mail-Adresse (z. B. aus einem Benutzer-Eingabefeld) in Android? org.apache.commons.validator.routines.EmailValidator scheint nicht verfügbar zu sein. Gibt es andere Bibliotheken, die dies tun, die in Android bereits enthalten sind oder würde ich RegExp verwenden müssen?

1140voto

mindriot Punkte 13789

Eine weitere Option ist die eingebaute Muster beginnend mit API Stufe 8:

public final static boolean isValidEmail(CharSequence target) {
  if (TextUtils.isEmpty(target)) {
    return false;
  } else {
    return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
  }
}

Muster sichtbare Quelle

OR

Einzeilige Lösung von @AdamvandenHoven:

public final static boolean isValidEmail(CharSequence target) {
  return !TextUtils.isEmpty(target) && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}

108voto

Andrei Buneyeu Punkte 6618

Das nächste Muster wird in der K-9-Post verwendet:

public static 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}" +
          ")+"
      );

Sie können die Funktion

private boolean checkEmail(String email) {
        return EMAIL_ADDRESS_PATTERN.matcher(email).matches();
}

76voto

Luten Punkte 5110

Seit API 8 (Android 2.2) gibt es ein Muster: Android.util.Patterns.EMAIL_ADDRESS http://developer.Android.com/reference/Android/util/Patterns.html

Damit können Sie IhrenEmailString validieren:

private boolean isValidEmail(String email) {
    Pattern pattern = Patterns.EMAIL_ADDRESS;
    return pattern.matcher(email).matches();
}

gibt true zurück, wenn die E-Mail gültig ist

UPD: Dieser Muster-Quellcode ist:

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}" +
        ")+"
    );

beziehen sich auf: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.Android/Android/2.2_r1.1/Android/util/Patterns.java

Sie können es also selbst erstellen, um die Kompatibilität mit API < 8 zu gewährleisten.

70voto

Salman Nazir Punkte 2489

Wir haben jetzt einen einfachen E-Mail-Mustervergleich.

Java:

 private static boolean isValidEmail(String email) {
        return !TextUtils.isEmpty(email) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
    }

Kotlin Funktion:

 private fun isValidEmail(email: String): Boolean {
        return !TextUtils.isEmpty(email) && Patterns.EMAIL_ADDRESS.matcher(email).matches()
    }

Kotlin-Erweiterung:

fun String.isValidEmail() =
    !TextUtils.isEmpty(this) && Patterns.EMAIL_ADDRESS.matcher(this).matches()

54voto

Glen Punkte 20940

Verwenden Sie kein Reg-Ex.

Offensichtlich ist das folgende ein reg-ex, das die meisten E-Mail-Adressen korrekt validiert, die mit RFC 2822 (und wird immer noch bei Dingen wie "user@gmail.com.nospam" scheitern, ebenso wie org.apache.commons.validator.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])+)\])

Die einfachste Möglichkeit, eine E-Mail zu überprüfen, besteht darin, eine Bestätigungs-E-Mail an die angegebene Adresse zu senden, die dann als ungültig zurückgewiesen wird.

Wenn Sie einige grundlegende Überprüfungen durchführen möchten, können Sie einfach überprüfen, ob es sich um die Form *@*

Wenn Sie eine geschäftslogikspezifische Validierung haben, können Sie diese mit einem Regex durchführen, z. B. muss ein gmail.com-Konto sein oder ähnliches.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X