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?

3voto

Linh Punkte 49889

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

2voto

Jenifer Punkte 21

Versuchen Sie diesen Code. Es funktioniert wirklich

            if (!email
                    .matches("^[\\w-_\\.+]*[\\w-_\\.]\\@([\\w]+\\.)+[\\w]+[\\w]$"))
            {
                Toast.makeText(getApplicationContext(), "Email is invalid",
                        Toast.LENGTH_LONG).show();
                return;
            }

2voto

Arman Punkte 29

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

2voto

Daniyal Javaid Punkte 1182

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.

2voto

stefan Punkte 4050

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.

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