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?
Antworten
Zu viele Anzeigen?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();
}
}
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();
}
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();
}
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.
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()
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.
- See previous answers
- Weitere Antworten anzeigen