¿Cómo comprobar si el texto de edittext es una dirección de correo electrónico o no?

114

¿Cómo verificar el texto de la edittextdirección de correo electrónico o no sin usar javascriptuna expresión regular? Aquí utilicé que inputtype="textEmailAddress"esto funciona pero no se muestra ningún mensaje de error.

Dipak Keshariya
fuente
2
Seguramente la respuesta de PointerNull a continuación es la respuesta razonable y moderna aquí.
Fattie
1
@JoeBlow, sí, estoy de acuerdo, pero hay una cantidad limitada de tiempo en la que el "autor de la pregunta" puede cambiar la respuesta acordada ....
angryITguy

Respuestas:

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

Pase su cadena de texto de edición en esta función.

para la verificación correcta del correo electrónico, necesita autenticación del lado del servidor


Tenga en cuenta que ahora hay un método integrado en Android, consulte las respuestas a continuación.

Andy
fuente
7
Stringimplementa, CharSequenceasí que creo que el elenco de emaila inputStres redundante.
nuala
Con la introducción de nuevos dominios de nivel superior que tienen más de 2 a 4 caracteres, esto debe actualizarse. Simplemente reemplace el {2.4} "con un" + ". (P. Ej. [email protected])
Dave Owens
No utilice expresiones regulares al validar direcciones de correo electrónico (consulte stackoverflow.com/a/201378/2003763 )
Thibault D.
409

En Android 2.2+ use esto:

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

por ejemplo:

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.");
 }
Puntero nulo
fuente
13

Siga los siguientes pasos

Paso 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>

Paso 2:

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

Paso 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
fuente
12

Escribí una biblioteca que amplía EditText que admite de forma nativa algunos métodos de validación y en realidad es muy flexible.

Los métodos de validación actuales, mientras escribo, soportados de forma nativa (a través de atributos xml ) son:

  1. regexp : para expresiones regulares personalizadas
  2. numérico : para un solo campo numérico
  3. alfa : para un campo solo alfa
  4. alphaNumeric : ¿adivina qué?
  5. correo electrónico : comprueba que el campo sea un correo electrónico válido
  6. creditCard : comprueba que el campo contiene una tarjeta de crédito válida mediante el algoritmo de Luhn
  7. teléfono : comprueba que el campo contenga un número de teléfono válido
  8. domainName : verifica que el campo contenga un nombre de dominio válido (siempre pasa la prueba en API Nivel <8)
  9. dirección IP : comprueba que el campo contiene una dirección IP válida webUrl: comprueba que el campo contiene una URL válida (siempre pasa la prueba en el nivel de API <8)
  10. nocheck : No marca nada. (Defecto)

Puede consultarlo aquí: https://github.com/vekexasia/android-form-edittext

Espero que lo disfrutes :)

En la página que vinculé, podrá encontrar también un ejemplo para la validación de correo electrónico. Copiaré el fragmento relativo aquí:

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

También hay una aplicación de prueba que muestra las posibilidades de la biblioteca.

Esta es una captura de pantalla de la aplicación que valida el campo de correo electrónico.

validación de correo electrónico realizada a través de la biblioteca xml +

Andrea Baccega
fuente
7

Como se menciona en una de las respuestas, puede usar la Patternsclase de la siguiente manera:

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

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

Por casualidad, si incluso admite un nivel de API inferior a 8, simplemente puede copiar el Patterns.javaarchivo en su proyecto y hacer referencia a él. Puede obtener el código fuente Patterns.javade este enlace

Mahendra Liya
fuente
4

En su caso, puede utilizar el 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
fuente
3

El siguiente código debería serle útil.

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
fuente
2

aquí correo electrónico es su ID de correo electrónico.

  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
fuente
El autor del RFC de correo electrónico actual, John Klensin, tiene una dirección de correo electrónico que usted rechaza. Contiene un signo +.
Arnt
2

Apache Commons Validator se puede usar como se menciona en las otras respuestas.

Paso: 1) Descargue el archivo jar desde aquí

Paso: 2) Agréguelo a las bibliotecas de su proyecto

La importación:

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

El código:

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

y permitir direcciones locales:

boolean allowLocal = true;
boolean valid = EmailValidator.getInstance(allowLocal).isValid(email);
Rey de misas
fuente
2

Para la validación de la dirección de correo electrónico, pruebe este código sencillo y sencillo.

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

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

Un método 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
fuente
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
fuente
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
fuente
0

para la validación de correo electrónico, intente esto.

public boolean checkemail(String email)
{

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

}
Niranj Patel
fuente
señor, por favor pruebe su validación para gfdfg@+*&.com como correo electrónico
R Fauzdar
0

Puedes comprobarlo por expresión regular

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

Para más validación haga clic aquí

Shaktisinh Jadeja
fuente
0

Con android.util.Patterns y Kotlin es muy sencillo. Función de una línea que devuelve un valor booleano.

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