Saltar al contenido principal
eLearner.app
Módulo 8 · Lección 1 de 429/32 en el curso~12 min
Lecciones del módulo (1/4)

Validar un email

Validar un correo electrónico "correctamente" es un problema mucho más difícil de lo que parece: la RFC 5322 es un monstruo. En la práctica, elegimos un patrón suficientemente bueno que acepte los casos comunes y rechace los obviamente incorrectos.

Code
Pattern: ^[\w.+-]+@[\w-]+(?:\.[\w-]+)+$
  • [\w.+-]+ -- parte local: letras, dígitos, _, ., +, -.
  • @ -- separador.
  • [\w-]+(?:\.[\w-]+)+ -- dominio + al menos un TLD separado por ..

Lo que acepta: mario.rossi@example.com, foo+bar@sub.example.co.uk, user_123@test-domain.io.

Lo que rechaza: mario@, @example.com, mario@example (sin TLD), espacios.

Limitaciones

El patrón anterior no acepta:

  • Cadenas entre comillas "strange (things)"@example.com (la RFC las permite).
  • Dominios con caracteres Unicode (\u00fcber@m\u00fcnchen.de).
  • TLDs muy largos que no pasen \w (por ejemplo, internacionalizados).

Si los necesitas, amplía la clase a \p{L} con la flag u, o delega en una biblioteca especializada.

Consideraciones y buenas prácticas para la validación de correos

Ninguna regex puede garantizar que una dirección de correo exista realmente. Patrones excesivamente complejos degradan el rendimiento y excluyen dominios inusuales pero válidos. Es mejor usar un patrón de validación simple para rechazar errores tipográficos obvios y enviar un código de verificación.

Pruébalo tú

Ejercicio#regex.m8.l1.e1
Intentos: 0Cargando...

Reconoce cada correo electrónico en el texto. Usa un patrón simple: letras/dígitos/puntos antes del @, dominio con al menos un punto.

Cargando editor...
Mostrar pista

Amplía la parte local a [\w.+-]+ y el dominio a [\w-]+\.[\w.-]+ para aceptar múltiples TLDs.

Solución disponible después de 3 intentos

Ejercicio de repaso

Ejercicio#regex.m8.l1.e2
Intentos: 0Cargando...

Captura el dominio (la parte después de la @) de cada correo como un grupo nombrado `dominio`.

Cargando editor...
Mostrar pista

Encierra la parte del dominio en un grupo nombrado: (?<dominio>[\w.-]+).

Solución disponible después de 3 intentos

Desafío adicional

Ejercicio#regex.m8.l1.e3
Intentos: 0Cargando...

Encuentra la parte del dominio de un correo electrónico (todo después de `@`), excluyendo el signo `@` mediante lookbehind.

Cargando editor...
Mostrar pista

Usa un lookbehind positivo (?<=@) delante de la clase de caracteres del dominio.

Solución disponible después de 3 intentos