wake-up-neo.net

Bestätigen Sie eine E-Mail in einem EditText

Ich möchte eine E-Mail bestätigen, die in einen EditText eingefügt wurde, und dies ist der Code, den ich bereits habe:

final EditText textMessage = (EditText) findViewById (R.id.textMessage);

final TextView text = (TextView) findViewById (R.id.text);

    textMessage.addTextChangedListener(new TextWatcher() { 
        public void afterTextChanged(Editable s) { 
            if (textMessage.getText().toString().matches("[a-zA-Z0-9._-][email protected][a-z]+.[a-z]+") && s.length() > 0)
            {
                text.setText("valid email");
            }
            else
            {
                text.setText("invalid email");
            }
        } 
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 
        public void onTextChanged(CharSequence s, int start, int before, int count) {} 
    }); 

Das Problem ist, dass, wenn ich drei Zeichen nach dem "@" eingebe, die Nachricht "gültige E-Mail" erscheint, wenn es erscheinen muss, wenn ich die vollständige E-Mail vorstelle.

Irgendwelche Vorschläge?

Danke euch allen!

16
KrLx_roller

Ändern Sie einfach Ihren regulären Ausdruck wie folgt:

"[a-zA-Z0-9._-][email protected][a-z]+\\.+[a-z]+"

Weil . (Punkt) bedeutet, dass jedes einzelne Zeichen übereinstimmt.ADD ein doppelter Backslash vor Ihrem Punkt, um für einen echten Punkt zu stehen.

23
Yuanhai Shi

Ich habe eine Bibliothek geschrieben, die EditText erweitert, die einige Validierungsmethoden unterstützt und eigentlich sehr flexibel ist. 

Aktuelle, während ich schreibende, native unterstützte (durch xml-Attribute) Validierungsmethoden sind:

  1. regexp: für benutzerdefinierten regulären Ausdruck
  2. numerisch: für ein nur numerisches Feld
  3. alpha: für ein reines Alpha-Feld
  4. alphaNumeric: weißt du was?
  5. E-Mail: Überprüft, ob das Feld eine gültige E-Mail ist
  6. creditCard: Überprüft anhand des Luhn-Algorithmus, ob das Feld eine gültige Kreditkarte enthält
  7. Telefon: Überprüft, ob das Feld eine gültige Telefonnummer enthält
  8. Domänenname: Überprüft, ob das Feld einen gültigen Domänennamen enthält (bestanden den Test immer auf API-Ebene <8).
  9. ipAddress: Überprüft, ob das Feld eine gültige IP-Adresse enthält. webUrl: Überprüft, ob das Feld eine gültige URL enthält (besteht den Test immer auf API-Ebene <8).
  10. nocheck: Es wird nichts geprüft. (Standard)

Sie können es hier ausprobieren: https://github.com/vekexasia/Android-form-edittext

Ich hoffe es gefällt euch :)

Auf der von mir verlinkten Seite finden Sie auch ein Beispiel für die E-Mail-Validierung. Ich werde den relativen Ausschnitt hier kopieren:

<com.andreabaccega.widget.FormEditText
       style="@Android:style/Widget.EditText"
       whatever:test="email"
       Android:id="@+id/et_email"
       Android:layout_width="match_parent"
       Android:layout_height="wrap_content"
       Android:hint="@string/hint_email"
       Android:inputType="textEmailAddress"
       />  

Es gibt auch eine Test-App mit den Bibliotheksmöglichkeiten.

Dies ist ein Screenshot der App, die das E-Mail-Feld bestätigt.

email validation done thorugh xml+library

15
Andrea Baccega
public boolean validateEmail(String email) {

Pattern pattern;
Matcher matcher;
String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
pattern = Pattern.compile(EMAIL_PATTERN);
matcher = pattern.matcher(email);
return matcher.matches();

}
5
kyogs

Hier einige gute Optionen, einschließlich Android.util.Patterns.EMAIL_ADDRESS für API 8+.

https://stackoverflow.com/a/7882950/1011746

3
mindriot

Wenn Sie API 8 oder höher verwenden, können Sie die sofort verfügbare Klasse Patterns verwenden, um E-Mails zu überprüfen. Beispielcode:

public final static boolean isValidEmail(CharSequence target) {
    if (target == null) {
        return false;
    } else {
        return Android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
    }
}

Wenn Sie sogar API-Level unter 8 unterstützen, können Sie die Patterns.Java-Datei einfach in Ihr Projekt kopieren und darauf verweisen. Den Quellcode für Patterns.Java erhalten Sie von diesem Link

3
Mahendra Liya

Probieren Sie dieses Muster aus .....

editText.addTextChangedListener (new TextWatcher () {

        @Override
        public void afterTextChanged(Editable s) {
            pattern = Pattern.compile("[email protected]+\\.[a-z]+");
            matcher = pattern.matcher(editText.getText().toString());

            if(matcher.matches()) {
                Log.i("Test","--------Valid Email--------");
            }else {

                Log.i("Test","--------Invalid Email------");
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        } 
    }); 
1
Kri

Tu es nicht im Code. Sie können das inputType-Attribut von EditText verwenden.

    <EditText 
        Android:id="@+id/edit_text"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:inputType="textEmailAddress"/>
1
Timuçin
private boolean validateEmailAddress(CharSequence emailAddress)
{

  if( Build.VERSION.SDK_INT >= 8 )
  {
    return Android.util.Patterns.EMAIL_ADDRESS.matcher(emailAddress).matches();
  }

  Pattern pattern;
  Matcher matcher;
  String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
  pattern = Pattern.compile(EMAIL_PATTERN);
  matcher = pattern.matcher(emailAddress);

  return matcher.matches();
}
0
Sonia

// das E-Mail-Adressformat überprüfen [email protected]

public boolean emailValidator(String email) 
{
    Pattern pattern;
    Matcher matcher;
    final String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
    pattern = Pattern.compile(EMAIL_PATTERN);
    matcher = pattern.matcher(email);
    return matcher.matches();
}
0
Virag Brahme