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.
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ú
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.
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
Captura el dominio (la parte después de la @) de cada correo como un grupo nombrado `dominio`.
Mostrar pista
Encierra la parte del dominio en un grupo nombrado: (?<dominio>[\w.-]+).
Solución disponible después de 3 intentos
Desafío adicional
Encuentra la parte del dominio de un correo electrónico (todo después de `@`), excluyendo el signo `@` mediante lookbehind.
Mostrar pista
Usa un lookbehind positivo (?<=@) delante de la clase de caracteres del dominio.
Solución disponible después de 3 intentos