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?Hier ist android.util.Patterns.EMAIL_ADDRESS
[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})+
String
passt, wenn
Start by 1->256 character in (a-z, A-Z, 0-9, +, ., _, %, - , +)
then 1 '@' character
then 1 character in (a-z, A-Z, 0-9)
then 0->64 character in (a-z, A-Z, 0-9, -)
then **ONE OR MORE**
1 '.' character
then 1 character in (a-z, A-Z, 0-9)
then 0->25 character in (a-z, A-Z, 0-9, -)
Beispiel für eine spezielle Match-E-Mail
a@b.c
a+@b-.c
a@b.c.d.e.f.g.h
Sie können dieses Muster für Ihren Fall abändern und dann validieren, indem Sie
fun isValidEmail(email: String): Boolean {
return Patterns.EMAIL_ADDRESS.matcher(email).matches()
}
Versuchen Sie diese einfache Methode, die keine E-Mail-Adressen akzeptiert, die mit Ziffern beginnen:
boolean checkEmailCorrect(String Email) {
if(signupEmail.length() == 0) {
return false;
}
String pttn = "^\\D.+@.+\\.[a-z]+";
Pattern p = Pattern.compile(pttn);
Matcher m = p.matcher(Email);
if(m.matches()) {
return true;
}
return false;
}
Laut Patterns.EMAIL_ADDRESS ist diese E-Mail korrekt "abc@abc.c". Also habe ich die Regex in Patterns.EMAIL_ADDRESS geändert und die Mindestlänge für die Domain erhöht. Hier ist die Funktion für Kotlin:
fun isEmailValid(email: String): Boolean =
email.isNotEmpty() && 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\\-]{1,25}" +
")+"
).matcher(email).matches()
Ich habe gerade den Bereich von {0,25} auf {1,25} geändert.
Entscheidend ist, dass Sie die E-Mail-Adresse vollständig validieren wollen. Sie wollen sie nicht nur auf syntaktische Korrektheit prüfen, sondern auch darauf, ob die E-Mail-Adresse echt ist.
Zwei offensichtliche Gründe: Echte Nutzer geben ihre E-Mail-Adressen oft falsch ein, y Einige Nutzer geben falsche E-Mail-Adressen ein. Daher sollten Sie eine syntaktische Prüfung und eine Existenzprüfung durchführen.
Die beste Möglichkeit, die ich auf Android gefunden habe, ist die Verwendung des kostenlosen Cloudmersive Validierungs-API für diese.
Der Code sieht wie folgt aus:
ApiClient defaultClient = Configuration.getDefaultApiClient();
// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
EmailApi apiInstance = new EmailApi();
String email = "email_example"; // String | Email address to validate, e.g. \"support@cloudmersive.com\". The input is a string so be sure to enclose it in double-quotes.
try {
FullEmailValidationResponse result = apiInstance.emailFullValidation(email);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling EmailApi#emailFullValidation");
e.printStackTrace();
}
Ich verwende dies in allen meinen Anwendungen und es ist großartig, weil ich die E-Mail-Adressen in der UX an der Eintrittsstelle.