Validación Visual de Formularios
Aprende a validar formularios en el cliente con Bootstrap 5: clases de estado .is-valid y .is-invalid, mensajes claros con .valid-feedback y .invalid-feedback, y la técnica needs-validation.
Validación en el Navegador con Bootstrap 5
Para proveer una experiencia de usuario impecable, Bootstrap 5 intercepta la validación HTML5 nativa y dibuja iconos de comprobación (palomilla verde) o advertencia (signo de exclamación rojo), acompañados de mensajes de retroalimentación claros.
Clases de Retroalimentación de Error y Éxito
| Clase en el Input | Mensaje Asociado | Efecto Visual |
|---|---|---|
.is-valid |
<div class="valid-feedback">¡Correcto!</div> |
Borde verde, icono de verificación y texto verde informativo. |
.is-invalid |
<div class="invalid-feedback">Campo requerido.</div> |
Borde rojo, icono de peligro y mensaje de corrección en rojo. |
El Script Oficial: .needs-validation y was-validated
Agrega la clase .needs-validation y el atributo novalidate al formulario <form>. Luego, con un pequeño script, agregas la clase .was-validated al enviar para que Bootstrap pinte los estados automáticamente:
const form = document.querySelector('.needs-validation');
form.addEventListener('submit', event => {
if (!form.checkValidity()) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add('was-validated');
}, false);
⚡ Formulario con Validación Visual Interactiva en Vivo
Presiona el botón "Enviar Formulario" con campos vacíos para ver los estados de error is-invalid y las correcciones automáticas:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Validación de Formularios Bootstrap 5</title>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="bg-light p-4">
<div class="container" style="max-width: 620px;">
<div class="card shadow-sm border-0 rounded-4 p-4 bg-white">
<h4 class="fw-bold text-dark mb-3">Validación de Datos en Kilopolis</h4>
<form id="formValidacion" class="needs-validation" novalidate>
<!-- Nombre de Usuario -->
<div class="mb-3">
<label for="campoUsuario" class="form-label fw-semibold">Nombre de Usuario</label>
<div class="input-group has-validation">
<span class="input-group-text">@</span>
<input type="text" class="form-control" id="campoUsuario" name="campoUsuario" placeholder="usuario_kilopolis" required>
<div class="invalid-feedback">
Por favor ingresa un nombre de usuario válido.
</div>
<div class="valid-feedback">
¡Excelente nombre de usuario!
</div>
</div>
</div>
<!-- Ciudad / País -->
<div class="mb-3">
<label for="campoCiudad" class="form-label fw-semibold">Ciudad de Residencia</label>
<input type="text" class="form-control" id="campoCiudad" name="campoCiudad" placeholder="Ej. Bogotá, Madrid, Ciudad de México" required>
<div class="invalid-feedback">
Debes proporcionar tu ciudad para asignar la zona horaria.
</div>
</div>
<!-- Casilla de Aceptación -->
<div class="mb-4">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="checkAcepto" name="checkAcepto" required>
<label class="form-check-label small" for="checkAcepto">
Acepto los términos de certificación de Kilopolis Academia
</label>
<div class="invalid-feedback">
Debes aceptar los términos antes de continuar.
</div>
</div>
</div>
<button class="btn btn-primary w-100 py-2 rounded-pill fw-semibold shadow-sm" type="submit">
Validar y Enviar Formulario »
</button>
</form>
</div>
</div>
<script>
const form = document.getElementById('formValidacion');
form.addEventListener('submit', function (event) {
if (!form.checkValidity()) {
event.preventDefault();
event.stopPropagation();
} else {
event.preventDefault();
alert('🎉 ¡Formulario 100% válido y listo para enviar!');
}
form.classList.add('was-validated');
}, false);
</script>
</body>
</html>
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.🚀 ¿Quieres dominar Manual Completo de Bootstrap 5.3 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.