¿Cómo debo validar una dirección de correo electrónico?

Resuelto znq asked hace 54 años • 35 respuestas

¿Cuál es una buena técnica para validar una dirección de correo electrónico (por ejemplo, desde un campo de entrada del usuario) en Android? org.apache.commons.validator.routines.EmailValidator no parece estar disponible. ¿Hay otras bibliotecas que hagan esto que ya estén incluidas en Android o tendría que usar RegExp?

znq avatar Jan 01 '70 08:01 znq
Aceptado

Otra opción son los patrones integrados que comienzan con API nivel 8:

public final static boolean isValidEmail(CharSequence target) {
  if (TextUtils.isEmpty(target)) {
    return false;
  } else {
    return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
  }
}

Fuente visible de patrones

O

Solución de una línea de @AdamvandenHoven:

public final static boolean isValidEmail(CharSequence target) {
  return !TextUtils.isEmpty(target) && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}
mindriot avatar Oct 24 '2011 22:10 mindriot

El siguiente patrón se utiliza en el correo K-9:

public static final 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}" +
          ")+"
      );

Puedes usar la función

private boolean checkEmail(String email) {
        return EMAIL_ADDRESS_PATTERN.matcher(email).matches();
}
Andrei Buneyeu avatar Mar 14 '2011 08:03 Andrei Buneyeu

Desde API 8 (android 2.2) existe un patrón: android.util.Patterns.EMAIL_ADDRESS http://developer.android.com/reference/android/util/Patterns.html

Entonces puedes usarlo para validar tuEmailString:

private boolean isValidEmail(String email) {
    Pattern pattern = Patterns.EMAIL_ADDRESS;
    return pattern.matcher(email).matches();
}

devuelve verdadero si el correo electrónico es válido

UPD: El código fuente de este patrón es:

public static final Pattern EMAIL_ADDRESS
    = 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}" +
        ")+"
    );

consulte: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/util/Patterns.java

Para que pueda crearlo usted mismo para que sea compatible con API <8.

Luten avatar Apr 09 '2012 07:04 Luten

Ahora tenemos un comparador de patrones de correo electrónico simple.

Java:

 private static boolean isValidEmail(String email) {
        return !TextUtils.isEmpty(email) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
    }

Función Kotlin:

 private fun isValidEmail(email: String): Boolean {
        return !TextUtils.isEmpty(email) && Patterns.EMAIL_ADDRESS.matcher(email).matches()
    }

Extensión de Kotlin:

fun String.isValidEmail() =
    !TextUtils.isEmpty(this) && Patterns.EMAIL_ADDRESS.matcher(this).matches()
Salman Nazir avatar May 10 '2016 15:05 Salman Nazir

No uses una expresión regular.

Aparentemente, la siguiente es una expresión regular que valida correctamente la mayoría de las direcciones de correo electrónico que cumplen con RFC 2822 (y aún fallará en cosas como " [email protected] ", al igual que org.apache.commons.validator. rutinas.EmailValidator)

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

Posiblemente la forma más fácil de validar un correo electrónico es simplemente enviar un correo electrónico de confirmación a la dirección proporcionada y si rebota, entonces no es válido.

Si desea realizar algunas comprobaciones básicas, puede comprobar que esté en el formulario*@*

Si tiene alguna validación específica de lógica de negocios, puede realizarla usando una expresión regular, por ejemplo, debe ser una cuenta de gmail.com o algo así.

Glen avatar Nov 30 '2009 11:11 Glen