Java >> Validar dirección de correo electrónico en Java

mails

  • Descripción de la Expresión Regular

Vamos a ver como validar una dirección de correo electrónico en Java haciendo uso de una Expresión Regular, también llamado patrón. La Expresión Regular que debe cumplir cualquier dirección de correo electrónico es el siguiente:

^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$;

A continuación vamos a explicar la Expresión Regular que acabamos de ver:

  • Comienzo del patrón
  • ^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$;
  • Caracteres por los que puede comenzar la dirección del correo electrónico
  • ^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$;
  • Caracteres opcionales.
  • ^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$;
  • La dirección de correo debe contener el símbolo @
  • ^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$;
  • El nombre del dominio del correo debe comenzar por estos caracteres
  • ^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$;
  • El primer dominio de nivel superior o TLD debe de comenzar por punto seguido por los caracteres resaltados
  • ^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$;
  • El primer nivel TLD puede ir seguido opcionalmente por un segundo nivel TLD que debe ser de tener 2 o más caracteres
  • ^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$;
  • Ejemplo de uso de Expresiones Regulares en Java

Una vez explicada la Expresión Regular vamos a pasar a implementar el método validateEmail que podrás utilizar en cualquier aplicación Java o Android para comprobar la validez de un correo electrónico en pocas líneas de código:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ValidatorUtil {

	private static final String PATTERN_EMAIL = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
			+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";

	/**
	 * Validate given email with regular expression.
	 * 
	 * @param email
	 *            email for validation
	 * @return true valid email, otherwise false
	 */
	public static boolean validateEmail(String email) {

		// Compiles the given regular expression into a pattern.
		Pattern pattern = Pattern.compile(PATTERN_EMAIL);

		// Match the given input against this pattern
		Matcher matcher = pattern.matcher(email);
		return matcher.matches();

	}

}
  • Testeando nuestro método

Vamos a comprobar el funcionamiento del método ejecutando pruebas unitarias usando JUnit 4. Vamos a crear una clase donde definiremos los datos de entrada de nuestras pruebas y definiremos dos test, uno que validará un conjunto de correos electrónicos válidos y otro que validará uno de correos inválidos:

import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

public class ValidatorEmailTest {

	private static String[] validEmails, invalidEmails;

	/**
	 * Load data to run the tests.
	 */
	@BeforeClass
	public static void emailProviderText() {
		validEmails = new String[] { "test@example.com",
				"test-101@example.com", "test.101@yahoo.com",
				"test101@example.com", "test_101@example.com",
				"test-101@test.net", "test.100@example.com.au", "test@e.com",
				"test@1.com", "test@example.com.com", "test+101@example.com",
				"101@example.com", "test-101@example-test.com" };

		invalidEmails = new String[] { "example", "example@.com.com",
				"exampel101@test.a", "exampel101@.com", ".example@test.com",
				"example**()@test.com", "example@%*.com",
				"example..101@test.com", "example.@test.com",
				"test@example_101.com", "example@test@test.com",
				"example@test.com.a5" };
	}

	/**
	 * Test which validate an array of valid e-mails.
	 */
	@Test
	public void validEmailTest() {

		for (String temp : validEmails) {

			// Check if the e-mail is valid using our method.
			boolean valid = ValidatorUtil.validateEmail(temp);
			System.out.println("Email is valid : " + temp + " , " + valid);

			// All of e-mails of this test must be valid.
			Assert.assertEquals(valid, true);
		}

	}

	/**
	 * Test which validate an array of invalid e-mails.
	 */
	@Test
	public void invalidEmailTest() {

		for (String temp : invalidEmails) {

			// Check if the e-mail is valid using our method.
			boolean valid = ValidatorUtil.validateEmail(temp);
			System.out.println("Email is valid : " + temp + " , " + valid);

			// All of e-mails of this test must be invalid.
			Assert.assertEquals(valid, false);
		}

	}

}

Si ejecutamos ahora el test anterior obtendremos los siguientes datos:

Email is valid : test@example.com , true
Email is valid : test-101@example.com , true
Email is valid : test.101@yahoo.com , true
Email is valid : test101@example.com , true
Email is valid : test_101@example.com , true
Email is valid : test-101@test.net , true
Email is valid : test.100@example.com.au , true
Email is valid : test@e.com , true
Email is valid : test@1.com , true
Email is valid : test@example.com.com , true
Email is valid : test+101@example.com , true
Email is valid : 101@example.com , true
Email is valid : test-101@example-test.com , true
Email is valid : example , false
Email is valid : example@.com.com , false
Email is valid : exampel101@test.a , false
Email is valid : exampel101@.com , false
Email is valid : .example@test.com , false
Email is valid : example**()@test.com , false
Email is valid : example@%*.com , false
Email is valid : example..101@test.com , false
Email is valid : example.@test.com , false
Email is valid : test@example_101.com , false
Email is valid : example@test@test.com , false
Email is valid : example@test.com.a5 , false

Descargar código fuente | Github

Etiquetado , , , ,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: