Comment vérifier que le texte d'edittext est une adresse e-mail ou non?

114

comment vérifier le texte de edittextson adresse e-mail ou non sans utiliser javascriptune expression régulière? Ici, j'ai utilisé inputtype="textEmailAddress"cela fonctionne mais aucun message d'erreur ne s'affiche.

Dipak Keshariya
la source
2
Sûrement la réponse de PointerNull ci-dessous est la réponse raisonnable et moderne ici ??
Fattie
1
@JoeBlow oui je suis d'accord, mais il y a un laps de temps limité pendant lequel le "demandeur" peut changer la réponse convenue ....
angryITguy

Réponses:

225
/**
 * method is used for checking valid email id format.
 * 
 * @param email
 * @return boolean true for valid false for invalid
 */
public static boolean isEmailValid(String email) {
    String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
    Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(email);
    return matcher.matches();
}

Passez votre chaîne de texte d'édition dans cette fonction.

pour une vérification correcte des e-mails, vous avez besoin d'une authentification côté serveur


Notez qu'il existe maintenant une méthode intégrée dans Android, voir les réponses ci-dessous.

Andy
la source
7
Stringimplémente CharSequencedonc je pense que le casting de emailà inputStrest redondant.
nuala
Avec l'introduction de nouveaux domaines de premier niveau de plus de 2 à 4 caractères, cela doit être mis à jour. Remplacez simplement le {2.4} "par un" + ". (Par exemple, [email protected])
Dave Owens
N'utilisez pas d'expressions régulières lors de la validation des adresses e-mail (voir stackoverflow.com/a/201378/2003763 )
Thibault D.
409

Sur Android 2.2+, utilisez ceci:

boolean isEmailValid(CharSequence email) {
   return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
}

par exemple:

EditText emailid = (EditText) loginView.findViewById(R.id.login_email);
String getEmailId = emailid.getText().toString();

// Check if email id is valid or not
       if (!isEmailValid(getEmailId)){
        new CustomToast().Show_Toast(getActivity(), loginView,
                "Your Email Id is Invalid.");
 }
Pointeur nul
la source
13

Veuillez suivre les étapes suivantes

Étape 1 :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/editText_email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_below="@+id/textView_email"
        android:layout_marginTop="40dp"
        android:hint="Email Adderess"
        android:inputType="textEmailAddress" />

    <TextView
        android:id="@+id/textView_email"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"
        android:text="Email Validation Example" />

</RelativeLayout>

Étape 2:

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

Étape 3:

public class MainActivity extends Activity {

private EditText email;

private String valid_email;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    initilizeUI();
}

/**
 * This method is used to initialize UI Components
 */
private void initilizeUI() {
    // TODO Auto-generated method stub

    email = (EditText) findViewById(R.id.editText_email);

    email.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

            // TODO Auto-generated method stub
            Is_Valid_Email(email); // pass your EditText Obj here.
        }

        public void Is_Valid_Email(EditText edt) {
            if (edt.getText().toString() == null) {
                edt.setError("Invalid Email Address");
                valid_email = null;
            } else if (isEmailValid(edt.getText().toString()) == false) {
                edt.setError("Invalid Email Address");
                valid_email = null;
            } else {
                valid_email = edt.getText().toString();
            }
        }

        boolean isEmailValid(CharSequence email) {
            return android.util.Patterns.EMAIL_ADDRESS.matcher(email)
                    .matches();
        } // end of TextWatcher (email)
    });

}

}
Rashid Ali
la source
12

J'ai écrit une bibliothèque qui étend EditText qui prend en charge nativement certaines méthodes de validation et qui est en fait très flexible.

Au moment où j'écris, les méthodes de validation prises en charge nativement (via les attributs xml ) sont les suivantes:

  1. regexp : pour une expression régulière personnalisée
  2. numérique : pour un champ uniquement numérique
  3. alpha : pour un champ alpha uniquement
  4. alphaNumeric : devinez quoi?
  5. email : vérifie que le champ est un email valide
  6. creditCard : vérifie que le champ contient une carte de crédit valide à l'aide de l'algorithme de Luhn
  7. phone : vérifie que le champ contient un numéro de téléphone valide
  8. domainName : vérifie que le champ contient un nom de domaine valide (passe toujours le test au niveau d'API <8)
  9. ipAddress : vérifie que le champ contient une adresse IP valide webUrl: vérifie que le champ contient une url valide (passe toujours le test au niveau API <8)
  10. nocheck : Il ne vérifie rien. (Défaut)

Vous pouvez le vérifier ici: https://github.com/vekexasia/android-form-edittext

Je espère que vous l'apprécierez :)

Dans la page que j'ai liée, vous pourrez également trouver un exemple de validation d'email. Je vais copier l'extrait relatif ici:

<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"
       />  

Il existe également une application de test présentant les possibilités de la bibliothèque.

Ceci est une capture d'écran de l'application validant le champ email.

validation des e-mails effectuée via la bibliothèque xml +

Andrea Baccega
la source
7

Comme mentionné dans l'une des réponses, vous pouvez utiliser la Patternsclasse comme ci-dessous:

public final static boolean isValidEmail(CharSequence target) {
    if (target == null) 
        return false;

    return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}

Par chance, si vous prenez même en charge le niveau d'API inférieur à 8, vous pouvez simplement copier le Patterns.javafichier dans votre projet et le référencer. Vous pouvez obtenir le code source Patterns.javade ce lien

Mahendra Liya
la source
4

Dans votre cas, vous pouvez utiliser le android.util.Patterns package.

EditText email = (EditText)findViewById(R.id.user_email);

if(Patterns.EMAIL_ADDRESS.matcher(email.getText().toString()).matches())
    Toast.makeText(this, "Email is VALID.", Toast.LENGTH_SHORT).show();
else
    Toast.makeText(this, "Email is INVALID.", Toast.LENGTH_SHORT).show();
Rahul Hindocha
la source
3

Le code suivant devrait vous être utile.

String email;
check.setOnClickListener(new OnClickListener() {


                public void onClick(View arg0) {

                    checkEmail(email);
                    if (checkMail) {
                        System.out.println("Valid mail Id");
                    }
                }
            });

        }
    }

    public static boolean checkEmail(String email) {

        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}" + ")+");
        return EMAIL_ADDRESS_PATTERN.matcher(email).matches();
    }
Parthi
la source
2

ici email est votre email-id.

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

    }
kyogs
la source
L'auteur du RFC de messagerie actuel, John Klensin, a une adresse e-mail que vous rejetez. Il contient un signe +.
arnt
2

Apache Commons Validator peut être utilisé comme mentionné dans les autres réponses.

Étape: 1) Téléchargez le fichier jar à partir d' ici

Étape: 2) Ajoutez-le dans vos bibliothèques de projet

L'import:

import org.apache.commons.validator.routines.EmailValidator;

Le code:

String email = "[email protected]";
boolean valid = EmailValidator.getInstance().isValid(email);

et pour autoriser les adresses locales:

boolean allowLocal = true;
boolean valid = EmailValidator.getInstance(allowLocal).isValid(email);
Roi des messes
la source
2

Pour la validation de l'adresse e-mail, essayez ce code simple et facile.

    String email = inputEmail.getText().toString().trim();

    if (!Patterns.EMAIL_ADDRESS.matcher(email).matches())
    {
        inputEmail.setError("Enter Valid Email Address");
        inputEmail.requestFocus();
    }
MUFAzmi
la source
1

Une méthode simple

    private boolean isValidEmail(String email)
{
    String emailRegex ="^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
    if(email.matches(emailRegex))
    {
        return true;
    }
    return false;
}
Justin Aloor
la source
1
   I Hope this code is beneficial for you

    public class Register extends Activity 
      {
       EditText FirstName, PhoneNo, EmailId,weight;
       Button Register;
       private static final Pattern EMAIL_PATTERN = Pattern
        .compile("^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");


   private static final Pattern USERFIRSTNAME_PATTERN = Pattern
        .compile("[a-zA-Z0-9]{1,250}");
   private static final Pattern PHONE_PATTERN = Pattern
        .compile("[a-zA-Z0-9]{1,250}");
       @Override
   public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register);


        Register=(Button) findViewById(R.id.register);

        FirstName=(EditText)findViewById(R.id.person_firstname);

            PhoneNo =(EditText)findViewById(R.id.phone_no);
            EmailId=(EditText)findViewById(R.id.email_id);
            weight=(EditText) findViewById(R.id.weight);

         Register.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                sFirstName= FirstName.getText().toString();
                 sPhoneNo= PhoneNo.getText().toString();
                sEmailId= EmailId.getText().toString();
                sweight= weight.getText().toString(); 

                if(sFirstName.equals("")||sPhoneNo.equals("")||sEmailId.equals("")||sweight.equals(""))
                {
                    if ((!CheckUsername(sFirstName))) 
                     {
                     Toast.makeText(Register.this, "FirstName can not be null",Toast.LENGTH_LONG).show();
                     }
                   else if ((!Checkphoneno(sPhoneNo)))
                       {
                    Toast.makeText(Register.this, "ENTER VALID mobile no ",Toast.LENGTH_LONG).show();
                       }
                    else if ((!CheckEmail(sEmailId)))
                       {
                      Toast.makeText(Register.this, "ENTER VALID EMAIL ID",Toast.LENGTH_LONG).show();
                       }
                    else if ((!Checkweight(sweight)))
                      {
                    Toast.makeText(Register.this, "ENTER Weight in kg",Toast.LENGTH_LONG).show();
                      }
               }

            }
                private boolean CheckEmail(String sEmailId) {

                    return EMAIL_PATTERN.matcher(sEmailId).matches();
                }



                private boolean CheckUsername(String sFirstName) {

                    return USERFIRSTNAME_PATTERN.matcher(sFirstName).matches();
                }
                private boolean Checkphoneno(String sPhoneNo) {

                    return PHONE_PATTERN.matcher(sPhoneNo).matches();
                }
                private boolean Checkweight(String sweight) {

                    return Weight_PATTERN.matcher(sweight).matches();
                }


        });
dhiraj kakran
la source
1
public static boolean isEmailValid(String email) {
    boolean isValid = false;

    String expression = "^(([\\w-]+\\.)+[\\w-]+|([a-zA-Z]{1}|[\\w-]{2,}))@"
            + "((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?"
            + "[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\."
            + "([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?"
            + "[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|"
            + "([a-zA-Z]+[\\w-]+\\.)+[a-zA-Z]{2,4})$";
    // "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
    CharSequence inputStr = email;

    Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(inputStr);
    if (!matcher.matches()) {
        isValid = true;
    }
    return isValid;
}
Gaurav Mehta
la source
0

pour la validation par e-mail, essayez ceci.

public boolean checkemail(String email)
{

    Pattern pattern = Pattern.compile(".+@.+\\.[a-z]+");
    Matcher matcher = pattern.matcher(email);
    return matcher.matches();

}
Niranj Patel
la source
monsieur, veuillez tester votre validation pour gfdfg@+*&.com par e
R Fauzdar
0

Vous pouvez le vérifier par expression régulière

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

        if (strEmail.isEmpty()) {
           return false;
        } else if (!matcher.matches()) {
            return false;
        }
        else
        {
        return true;
        }
     }
Gevaria Purva
la source
0
private boolean isValidEmailID(String email) {
    String PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
    Pattern pattern = Pattern.compile(PATTERN);
    Matcher matcher = pattern.matcher(email);
    return matcher.matches();
}

Pour plus de validation cliquez ici

Shaktisinh Jadeja
la source
0

Avec android.util.Patterns et Kotlin, c'est très simple. Une fonction de ligne qui renvoie une valeur booléenne.

fun validateEmail(email: String) = Patterns.EMAIL_ADDRESS.matcher(email)
Artem Botnev
la source