jQuery Form Validation: HTML & CSS Tutorial

Build a simple registration form with HTML and CSS, then validate it on the client with the jQuery Validation plugin before the data ever reaches your backend. Four fields are validated — name, email, username and password — each with its own inline error message. Available in English and Español, use the tabs below to switch.

Registration form with HTML, CSS and jQuery Validation

Formulario HTML y CSS con validación de jQuery

En esta guía te muestro cómo construir un formulario de registro con HTML y CSS, y validarlo con la librería jQuery Validation antes de guardar los datos en la base de datos. El ejemplo valida cuatro campos: nombre, correo electrónico, nombre de usuario y contraseña, mostrando un mensaje de error específico junto a cada campo cuando la regla no se cumple.

Validar un formulario a mano con JavaScript puro implica escribir una función distinta por cada regla, lo cual es lento y difícil de mantener a medida que el formulario crece. La librería validate.js de jQuery resuelve esto con un objeto de configuración simple: le indicas qué regla aplica a cada campo (requerido, longitud mínima, formato de correo, etc.) y qué mensaje mostrar si falla. En este ejemplo usamos la versión jQuery 1.11.

Estos son los archivos que debes cargar al inicio de tu página para que el ejemplo funcione:

<script src="assets/js/jquery.1.11.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script> <link href="bootstrap-3.3.5/css/bootstrap.min.css" rel="stylesheet">

Formulario HTML: index.html

Esta es la estructura HTML completa del formulario. Lo importante aquí son los atributos id de cada input: son el punto donde jQuery 1.11 se conecta con el formulario para leer y validar cada campo.

<div class="container bootstrap snippet"> <div class="row"><br> <div style="display:none" class="alert alert-success alert-success" role="alert">Formulario enviado correctamente</div> <div class="col-md-4 col-md-offset-7"> <div class="panel panel-default"> <div class="panel-heading"> <strong class="">Iniciar sesión</strong> </div> <div class="panel-body"> <form class="form-horizontal" role="form" id="idFormulario"> <div class="form-group"> <label for="inputEmail3" class="col-sm-3 control-label">Nombre</label> <div class="col-sm-9"> <input type="text" name="nombre" class="form-control" id="inputNombre" placeholder="ingrese nombre completo"> </div> </div> <div class="form-group"> <label for="inputCorreo" class="col-sm-3 control-label">Correo electrónico</label> <div class="col-sm-9"> <input type="email" name="correo" class="form-control" id="inputCorreo" placeholder="ingrese su correo" required=""> </div> </div> <div class="form-group"> <label for="inputEmail3" class="col-sm-3 control-label">Usuario</label> <div class="col-sm-9"> <input class="form-control" name="usuario" id="inputUsuario" placeholder="username" required=""> </div> </div> <div class="form-group"> <label for="inputPassword3" class="col-sm-3 control-label">Contraseña</label> <div class="col-sm-9"> <input type="password" name="contrasena" class="form-control" id="inputContraseña" placeholder="ingrese una contraseña" required=""> </div> </div> <div class="form-group last"> <div class="col-sm-offset-3 col-sm-9"> <button type="submit" class="btn btn-success btn-sm">Entrar</button> <button type="reset" class="btn btn-default btn-sm">Restablecer</button> </div> </div> </form> </div> <div class="panel-footer">Tener una cuenta? <a href="index.html" class="">Entre aquí</a> </div> </div> </div> </div> </div>

Archivo de estilos CSS: index.css

Este es el CSS completo para que el formulario se vea más cuidado. La parte que realmente importa para la validación: cuando un campo no cumple su regla, estos estilos le ponen un borde rojo para que el error sea evidente de un vistazo.

input.error, input select.error { border: 1px solid red; } label.error{ color:red; }

Archivo jQuery: formValidation.js

Y este es el código jQuery completo. Aquí definimos las reglas de validación: cada regla se asocia al name de un input del formulario, y junto a ella un mensaje que se muestra cuando esa regla específica falla.

var rules = { nombre: {required:true,minlength: 3}, usuario: {required:true,minlength: 3}, contrasena: {required:true,minlength: 6}, correo:{required: true, email:true}, }; let mensajes = { nombre: {required:"Nombre Requerido"}, usuario: {required:"Usuario Requerido"}, contrasena:{required:"Contraseña Requerida", minlength:"Caracteres minimos 6"}, correo:{required:"Correo electrónico Requerido", email:"Formato de Correo electrónico incorrecto"}, }; $(document).ready (function(){ $("#idFormulario").submit(function(e) { e.preventDefault(); }).validate({ rules:rules, messages:mensajes, submitHandler: function(form) { $('.alert-success').show(1000); return false; } }); });

Otras reglas útiles de jQuery Validation

Además de required, minlength y email, la librería trae más reglas listas para usar:

  • maxlength: comprobará que el número de caracteres es menor al especificado
  • minlength: comprobará que el número de caracteres es mayor al especificado
  • rangelength: comprobará que el número de caracteres introducidos se encuentra entre el rango especificado, por ejemplo rangelength:[50,250]
  • min: se aplica a campos numéricos, comprueba que como mínimo se introduzca un valor igual al especificado
  • max: se aplica a campos numéricos, comprueba que como mucho se introduzca un valor igual al especificado
  • equalTo: se usa para comprobar que el valor de dos campos sea el mismo, por ejemplo la confirmación de una contraseña o correo. Su uso sería de la siguiente forma: confirm_email:{equalTo:"#email"}
  • url: comprobará que el valor introducido tiene formato de URL
  • email: comprobará que el valor introducido tiene formato de e-mail

Con esto ya tienes un formulario de registro completo, validado en el cliente antes de enviarlo a tu backend. Descarga el ejemplo o mira la demo en vivo con los botones de arriba para probarlo tú mismo.

HTML and CSS form with jQuery validation

In this guide I'll show you how to build a registration form with HTML and CSS, and validate it with the jQuery Validation plugin before the data is saved to the database. The example validates four fields — name, email, username and password — showing a specific error message next to each field whenever its rule isn't met.

Validating a form by hand with plain JavaScript means writing a separate function for every rule, which is slow and hard to maintain as the form grows. jQuery's validate.js library solves this with a simple configuration object: you tell it which rule applies to each field (required, minimum length, email format, etc.) and which message to show when it fails. This example uses jQuery 1.11.

Here are the files you need to load at the top of your page for the example to work:

<script src="assets/js/jquery.1.11.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script> <link href="bootstrap-3.3.5/css/bootstrap.min.css" rel="stylesheet">

HTML file: index.html

This is the full HTML markup for the form. What matters most here are each input's id attributes: they're the hook that jQuery 1.11 uses to read and validate every field.

<div class="container bootstrap snippet"> <div class="row"><br> <div style="display:none" class="alert alert-success alert-success" role="alert">Formulario enviado correctamente</div> <div class="col-md-4 col-md-offset-7"> <div class="panel panel-default"> <div class="panel-heading"> <strong class="">Iniciar sesión</strong> </div> <div class="panel-body"> <form class="form-horizontal" role="form" id="idFormulario"> <div class="form-group"> <label for="inputEmail3" class="col-sm-3 control-label">Nombre</label> <div class="col-sm-9"> <input type="text" name="nombre" class="form-control" id="inputNombre" placeholder="ingrese nombre completo"> </div> </div> <div class="form-group"> <label for="inputCorreo" class="col-sm-3 control-label">Correo electrónico</label> <div class="col-sm-9"> <input type="email" name="correo" class="form-control" id="inputCorreo" placeholder="ingrese su correo" required=""> </div> </div> <div class="form-group"> <label for="inputEmail3" class="col-sm-3 control-label">Usuario</label> <div class="col-sm-9"> <input class="form-control" name="usuario" id="inputUsuario" placeholder="username" required=""> </div> </div> <div class="form-group"> <label for="inputPassword3" class="col-sm-3 control-label">Contraseña</label> <div class="col-sm-9"> <input type="password" name="contrasena" class="form-control" id="inputContraseña" placeholder="ingrese una contraseña" required=""> </div> </div> <div class="form-group last"> <div class="col-sm-offset-3 col-sm-9"> <button type="submit" class="btn btn-success btn-sm">Entrar</button> <button type="reset" class="btn btn-default btn-sm">Restablecer</button> </div> </div> </form> </div> <div class="panel-footer">Tener una cuenta? <a href="index.html" class="">Entre aquí</a> </div> </div> </div> </div> </div>

CSS file: index.css

Here's the full CSS for a form that looks a bit more polished. The part that actually matters for validation: whenever a field breaks its rule, these styles add a red border so the error is obvious at a glance.

input.error, input select.error { border: 1px solid red; } label.error{ color:red; }

jQuery file: formValidation.js

And here's the full jQuery code. This is where the validation rules are defined: each rule is tied to an input's name, together with the message shown when that specific rule fails.

var rules = { nombre: {required:true,minlength: 3}, usuario: {required:true,minlength: 3}, contrasena: {required:true,minlength: 6}, correo:{required: true, email:true}, }; let mensajes = { nombre: {required:"Nombre Requerido"}, usuario: {required:"Usuario Requerido"}, contrasena:{required:"Contraseña Requerida", minlength:"Caracteres minimos 6"}, correo:{required:"Correo electrónico Requerido", email:"Formato de Correo electrónico incorrecto"}, }; $(document).ready (function(){ $("#idFormulario").submit(function(e) { e.preventDefault(); }).validate({ rules:rules, messages:mensajes, submitHandler: function(form) { $('.alert-success').show(1000); return false; } }); });

Other useful jQuery Validation rules

Besides required, minlength and email, the plugin ships with more ready-to-use rules:

  • maxlength: checks that the number of characters is less than the one specified
  • minlength: checks that the number of characters is greater than the one specified
  • rangelength: checks that the number of characters entered falls within the specified range, e.g. rangelength:[50,250]
  • min: applies to numeric fields, checks that a value at least equal to the one specified is entered
  • max: applies to numeric fields, checks that a value at most equal to the one specified is entered
  • equalTo: used to check that the value of two fields matches, for example a password or email confirmation. Used like: confirm_email:{equalTo:"#email"}
  • url: checks that the entered value has a URL format
  • email: checks that the entered value has an e-mail format

And that's it — a complete registration form, validated on the client before it's sent to your backend. Download the example or try the live demo with the buttons above.