14. Validación de Formularios en el Cliente: Emails, Passwords y Slugs
Patrones para validar formularios web en tiempo real: contraseñas robustas con lookaheads, emails RFC y sanitización preventiva.
Validación en el Cliente con Expresiones Regulares
La validación en el navegador (Frontend) tiene como objetivo brindar retroalimentación instantánea al usuario para mejorar la experiencia de uso (UX), evitando enviar formularios con errores tipográficos evidentes.
Catálogo de Patrones Prácticos para Producción
| Campo | Expresión Regular Recomendada | Descripción |
|---|---|---|
| Email Pragmático | ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ |
Valida estructura estándar de correo sin bloquear dominios modernos. |
| Slug para URLs | ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
Minúsculas y números separados por guiones simples sin guiones al inicio o final. |
| Fecha ISO | ^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$ |
Formato AAAA-MM-DD con meses (01-12) y días (01-31). |
| Teléfono Internacional | ^\+?[1-9]\d{1,14}$ |
Formato estándar E.164 (hasta 15 dígitos con prefijo internacional opcional). |
⚡ Módulo Reutilizable de Validación de Formularios en JS
Crea un objeto validador estructurado para comprobar emails, nombres de usuario, contraseñas y teléfonos con mensajes de error descriptivos.
// Módulo de Validación de Formularios (Kilopolis Academia)
const Validador = {
reglas: {
email: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,
username: /^[a-z0-9_]{3,16}$/,
slug: /^[a-z0-9]+(?:-[a-z0-9]+)*$/,
telefonoE164: /^\+?[1-9]\d{9,14}$/,
passwordFuerte: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,32}$/
},
validarCampo(tipo, valor) {
const patron = this.reglas[tipo];
if (!patron) throw new Error(`Regla de validación desconocida: ${tipo}`);
return patron.test(String(valor).trim());
},
validarFormulario(datos) {
const errores = {};
for (const [campo, valor] of Object.entries(datos)) {
if (this.reglas[campo] && !this.validarCampo(campo, valor)) {
errores[campo] = `El valor ingresado para "${campo}" no cumple con el formato requerido.`;
}
}
return {
esValido: Object.keys(errores).length === 0,
errores
};
}
};
// Prueba con datos reales
const formularioAlumno = {
username: "carlos_dev",
email: "[email protected]",
slug: "mi-primer-proyecto-fullstack",
telefonoE164: "+573001234567",
passwordFuerte: "Kilopolis*2026!"
};
console.log("--- 1. Validación de Formulario Válido ---");
console.log(Validador.validarFormulario(formularioAlumno));
console.log("\n--- 2. Validación de Formulario con Errores ---");
const formularioInvalido = {
username: "User con Espacios!",
email: "correo-invalido@",
slug: "-slug-con-guion-inicial-",
passwordFuerte: "12345"
};
console.log(Validador.validarFormulario(formularioInvalido));
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección¿Por qué la expresión /^[a-z0-9]+(?:-[a-z0-9]+)*$/ es perfecta para validar un slug de URL?
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.🚀 ¿Quieres dominar Regex en JavaScript: Expresiones Regulares & RegExp y crear proyectos reales?
Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.
🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.