Un liviano javascript que valida formularios en línea de una nueva manera mucho más fácil y extensible sin la necesidad de librerías adicionales como jQuery. Puede ver un ejemplo terminado haciendo clic aquí.
Contenido
- El Problema
- Características
- Validación básica paso a paso
- Creando mensajes de error más específicos junto con efectos visuales
- Nombres preestablecidos de IBForm
- Agregando campos personalizados
El problema
Admitámoslo colegas, lidiar con la validación de formularios es una maldición. Por lo menos para mí cuando alguien menciona la palabra formulario siempre pienso en el proceso casi interminable y totalmente fastidioso que implica crear el boceto del formulario, la maquetación en HTML, el diseño en CSS, la validación en javascript, el procesamiento con el lenguaje del servidor y el almacenamiento en una base de datos. Sin duda, la parte más aburrida y más larga del tema es la validación con Javascript. ¡Qué aburrido!
Algunos dirán, pero Iván, si ya hay varios scripts que validan formularios que hacen la vida más fácil. Debo admitir que he probado muchos pero la verdad la mayoría no me gustan debido principalmente a las siguientes razones:
- Dependencia de librerías externas (como jQuery).
- Están creados en inglés.
- La validación está creada con campos anglosajones en mente. Como códigos zip, fechas, nombres, diferentes a los nuestros.
- Validar un formulario llenado por un colombiano con uno de estos remedios resulta peor que la enfermedad.
- Capacidad limitada de validación y la más importante,
- son entrometidos. Automáticamente alteran gráficamente el formulario para indicar campos con errores y generalmente no hay mucha libertad sobre cómo mostrar ese resultado.
Por estas razones, decidí crear mi propio validador de formularios del cual hablaré en la siguiente sección.
La solución
Presento el primer y más completo sistema integrado de validación de formularios en español optimizado para usuarios Colombianos. IBForm es increíblemente sencillo de usar (asumiendo que usted tiene nociones básicas de JavaScript) y lo mejor de todo es que no obstruye su trabajo. Usted como desarrollador tendrá toda la libertad de mostrar el resultado de la validación como desee. Si quiere puede mostrar sólo un “alert” indicándole al visitante los errores cometidos o si desea también puede crear los mejores efectos visuales que le lleguen a la mente. Las posibilidades son ilimitadas.
Características
- El más completo sistema de validación disponible en español.
- La manera absolutamente correcta de validar formularios. Asígnele un formulario a IBForm y este le dirá si el formulario es válido. Si no lo es, le retornará un array con el mensaje de error de cada campo así como su ubicación en el documento XML relativo al formulario lo que facilita tremendamente la generación de efectos visuales.
- Contiene campos preestablecidos. Simplemente nombre los campos de su formulario acorde a la lista y listo.
- Ligero, no más de 18KB.
- No hace uso de librerías externas como JQuery. Ideal para los amantes del JavaScript puro.
- Campos preestablecidos específicos para usuarios Colombianos.
- Eficiente y rápido proceso de validación.
- Facilita la población de campos de selección
- Soporta infinitos formularios por página.
- No es entrometido. No genera absolutamente ningún efecto gráfico dándole la libertad a usted para validar el formulario a su gusto.
Limitaciones
- IBForm aún no soporta campos de selección múltiple ni botones radio.
Compatibilidad
Se ha comprobado que IBForm funciona correctamente en cualquier navegador común.
Validación básica paso a paso
Supongamos que tenemos el siguiente documento XHTML. En él se encuentra un simple formulario de contacto. Note que el campo de selección departamento no tiene actualmente ninguna opción.
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Demostración de IBForm</title></head>
- <body>
- <h1>Formulario experimental: Direcciones en formato estándar</h1>
- <form action="#" method="post">
- <p><label for="nombre">Ingrese su nombre:</label><input type="text" name="nombre" id="nombre"/></p>
- <p><label for="correo">Ingrese su correo:</label><input type="text" name="correo" id="correo"/></p>
- <p><label for="departamento">Seleccione departamento:</label><select name="departamento" id="departamento"></select></p>
- <p><label for="comentario">Ingrese su comentario:</label></p>
- <p><textarea rows="5" cols="30" name="comentario" id="comentario"></textarea></p>
- <p><input class="button" type="submit" value="Enviar" /></p>
- </form>
- </body>
- </html>
Antes que nada, debemos cambiar los nombres de nuestros campos en el formulario por alguno de los nombres preestablecidos de IBForm. El formulario quedaría de esta forma:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Demostración de IBForm</title></head>
- <body>
- <h1>Formulario experimental: Direcciones en formato estándar</h1>
- <form action="#" method="post">
- <p><label for="interesado_pNombre_pApellido">Ingrese su nombre:</label><input type="text" name="interesado_pNombre_pApellido" id="interesado_pNombre_pApellido"/></p>
- <p><label for="interesado_correoElectronico">Ingrese su correo:</label><input type="text" name="interesado_correoElectronico" id="interesado_correoElectronico"/></p>
- <p><label for="casa_departamento">Seleccione departamento:</label><select name="casa_departamento" id="casa_departamento"></select></p>
- <p><label for="interesado_comentario">Ingrese su comentario:</label></p>
- <p><textarea rows="5" cols="30" name="interesado_comentario" id="interesado_comentario"></textarea></p>
- <p><input class="button" type="submit" value="Enviar" /></p>
- </form>
- </body>
- </html>
Ahora, incluyamos el IBForm en el <head>:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <script type="text/javascript" defer="defer" src="IBForm-0.07.min.js"></script>
- <title>Demostración de IBForm</title></head>
- <body>
- <h1>Formulario experimental: Direcciones en formato estándar</h1>
- <form action="#" method="post">
- <p><label for="interesado_pNombre_pApellido">Ingrese su nombre:</label><input type="text" name="interesado_pNombre_pApellido" id="interesado_pNombre_pApellido"/></p>
- <p><label for="interesado_correoElectronico">Ingrese su correo:</label><input type="text" name="interesado_correoElectronico" id="interesado_correoElectronico"/></p>
- <p><label for="casa_departamento">Seleccione departamento:</label><select name="casa_departamento" id="casa_departamento"></select></p>
- <p><label for="interesado_comentario">Ingrese su comentario:</label></p>
- <p><textarea rows="5" cols="30" name="interesado_comentario" id="interesado_comentario"></textarea></p>
- <p><input class="button" type="submit" value="Enviar" /></p>
- </form>
- </body>
- </html>
También incluyamos otro archivo .js donde pondremos las instrucciones que le daremos a nuestro IBForm. En este ejemplo, lo llamé validacion.js
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <script type="text/javascript" defer="defer" src="IBForm-0.07.min.js"></script>
- <script type="text/javascript" defer="defer" src="validacion.js"></script>
- <title>Demostración de IBForm</title></head>
- <body>
- <h1>Formulario experimental: Direcciones en formato estándar</h1>
- <form action="#" method="post">
- <p><label for="interesado_pNombre_pApellido">Ingrese su nombre:</label><input type="text" name="interesado_pNombre_pApellido" id="interesado_pNombre_pApellido"/></p>
- <p><label for="interesado_correoElectronico">Ingrese su correo:</label><input type="text" name="interesado_correoElectronico" id="interesado_correoElectronico"/></p>
- <p><label for="casa_departamento">Seleccione departamento:</label><select name="casa_departamento" id="casa_departamento"></select></p>
- <p><label for="interesado_comentario">Ingrese su comentario:</label></p>
- <p><textarea rows="5" cols="30" name="interesado_comentario" id="interesado_comentario"></textarea></p>
- <p><input class="button" type="submit" value="Enviar" /></p>
- </form>
- </body>
- </html>
Abramos nuestro archivo validacion.js y en él crearemos una función y se la asignaremos al evento onload de nuestro objeto window.
- window.onload =
- function()
- {
- };
Esa función correrá siempre que abra nuestra página con el formulario. Dentro de esta nueva función, de la misma manera asignémosle una función al evento onsubmit de nuestro formulario.
- window.onload =
- function()
- {
- window.document.forms[0].onsubmit =
- function()
- {
- };
- };
Ahora, antes que podamos validar nuestro formulario es importante cancelar el comportamiento por defecto del navegador el cual es enviar el formulario a POST. Si no lo hacemos, el formulario siempre se enviará antes de ser validado.
En un mundo ideal donde todos los navegadores se comportaran igual simplemente tendríamos que agregar un argumento a la última función que acabamos de crear y dentro de esta cancelar el evento por defecto, como lo sugiere el siguiente código:
- window.onload =
- function()
- {
- window.document.forms[0].onsubmit =
- function(event)
- {
- event.preventDefault();
- };
- };
Lamentablemente como no vivimos en un mundo ideal, gracias como siempre a Internet Explorer que no soporta preventDefault, debemos hacer eso un poquito más complicado a través de un simple verificador de navegador. La línea 7 del código anterior la cambiamos por:
- var evt = event || window.event;
- if (evt.preventDefault)
- {
- evt.preventDefault();
- }
- else
- {
- evt.returnValue = false;
- evt.cancelBubble = true;
- }
Lo que nos proporcionaría:
- window.onload =
- function()
- {
- window.document.forms[0].onsubmit =
- function(event)
- {
- var evt = event || window.event;
- if (evt.preventDefault)
- {
- evt.preventDefault();
- }
- else
- {
- evt.returnValue = false;
- evt.cancelBubble = true;
- }
- };
- };
Acabamos de hacer lo más complicado de todo el proceso que es simplemente prevenir el comportamiento por defecto en los distintos navegadores.
Crearemos ahora un objeto de clase IBForm al cual le asignaremos a su constructor nuestro formulario como parámetro (lo sé, no existen clases en JavaScript). Este procedimiento lo realizaremos inmediatamente antes de la función que acabamos de modificar. Al hacer esto, IBForm automáticamente poblará nuestra lista de selección de departamentos Colombianos.
- window.onload =
- function()
- {
- var miFormularioIBForm = new IBForm(window.document.forms[0]);
- window.document.forms[0].onsubmit =
- function(event)
- {
- var evt = event || window.event;
- if (evt.preventDefault)
- {
- evt.preventDefault();
- }
- else
- {
- evt.returnValue = false;
- evt.cancelBubble = true;
- }
- };
- };
Crearemos ahora justo después de nuestró código que previene el evento por defecto de nuestro formulario un array donde almacenaremos todos los problemas que encuentre IBForm.
- window.onload =
- function()
- {
- var miFormularioIBForm = new IBForm(window.document.forms[0]);
- window.document.forms[0].onsubmit =
- function(event)
- {
- var evt = event || window.event;
- if (evt.preventDefault)
- {
- evt.preventDefault();
- }
- else
- {
- evt.returnValue = false;
- evt.cancelBubble = true;
- }
- var erroresEncontrados = new Array();
- };
- };
Para poblar nuestro array recién creado, le asignaremos el valor de retorno del evento validate() del IBForm.
El evento validate() de nuestro formulario lo que hace es devolvernos un array de dos dimensiones con los errores encontrados en el momento de la validación de nuestro formulario.
Ahora sí, procedamos a darle vida a nuestro array:
- window.onload =
- function()
- {
- var miFormularioIBForm = new IBForm(window.document.forms[0]);
- window.document.forms[0].onsubmit =
- function(event)
- {
- var evt = event || window.event;
- if (evt.preventDefault)
- {
- evt.preventDefault();
- }
- else
- {
- evt.returnValue = false;
- evt.cancelBubble = true;
- }
- var erroresEncontrados = new Array();
- erroresEncontrados = miFormularioIBForm.validate();
- };
- };
Para mostrar un mensaje de error, tiene sentido que si el arreglo que acabamos de llenar está vacío querrá decir que no hubo ningún error en el proceso de validación y que el formulario es completamente válido. Podemos mostrar un mensaje adecuado con una simple condición:
- window.onload =
- function()
- {
- var miFormularioIBForm = new IBForm(window.document.forms[0]);
- window.document.forms[0].onsubmit =
- function(event)
- {
- var evt = event || window.event;
- if (evt.preventDefault)
- {
- evt.preventDefault();
- }
- else
- {
- evt.returnValue = false;
- evt.cancelBubble = true;
- }
- var erroresEncontrados = new Array();
- erroresEncontrados = miFormularioIBForm.validate();
- if(erroresEncontrados.length == 0)
- {
- alert("El formulario es válido.");
- }
- else
- {
- alert("El formulario tiene errores.");
- }
- };
- };
Creando mensajes de error más específicos junto con efectos visuales
El arreglo que devuelve el evento validate() de IBForm tiene la siguiente estructura:
arreglo[número_de_iteración][0]
Que devuelve la posición del elemento (número del nodo xml) con el problema relativa al formulario.
arreglo[número_de_iteración][1]
Que devuelve el mensaje de error por defecto en español.
Ahora lo que haremos es crear un mensaje mostrando un error más específico. Es decir, que no sólo diga “El formulario tiene errores ” sino que muestre exactamente cuáles son los campos con errores de validación.
- window.onload =
- function()
- {
- var miFormularioIBForm = new IBForm(window.document.forms[0]);
- window.document.forms[0].onsubmit =
- function(event)
- {
- var evt = event || window.event;
- if (evt.preventDefault)
- {
- evt.preventDefault();
- }
- else
- {
- evt.returnValue = false;
- evt.cancelBubble = true;
- }
- var erroresEncontrados = new Array();
- erroresEncontrados = miFormularioIBForm.validate();
- if(erroresEncontrados.length == 0)
- {
- alert("El formulario es válido.");
- }
- else
- {
- var mensaje = "Se han encontrado los siguientes errores: \n"
- alert(mensaje);
- }
- };
- };
Para lograr esto, es necesario crear un bucle para examinar cada iteración de nuestro formulario e ir llenando nuestro mensaje poco a poco con cada texto de error que está almacenado en nuestro arreglo.
- window.onload =
- function()
- {
- var miFormularioIBForm = new IBForm(window.document.forms[0]);
- window.document.forms[0].onsubmit =
- function(event)
- {
- var evt = event || window.event;
- if (evt.preventDefault)
- {
- evt.preventDefault();
- }
- else
- {
- evt.returnValue = false;
- evt.cancelBubble = true;
- }
- var erroresEncontrados = new Array();
- erroresEncontrados = miFormularioIBForm.validate();
- if(erroresEncontrados.length == 0)
- {
- alert("El formulario es válido.");
- }
- else
- {
- var mensaje = "Se han encontrado los siguientes errores: \n"
- for (var aux=0; aux<=erroresEncontrados.length – 1; aux++)
- {
- mensaje += erroresEncontrados[aux][1] + "\n";
- }
- alert(mensaje);
- }
- };
- };
Para agregar un simple efecto, podemos simplemente asignarle un borde rojo a cada uno de los campos con error en el momento de validación.
- window.onload =
- function()
- {
- var miFormularioIBForm = new IBForm(window.document.forms[0]);
- window.document.forms[0].onsubmit =
- function(event)
- {
- var evt = event || window.event;
- if (evt.preventDefault)
- {
- evt.preventDefault();
- }
- else
- {
- evt.returnValue = false;
- evt.cancelBubble = true;
- }
- var erroresEncontrados = new Array();
- erroresEncontrados = miFormularioIBForm.validate();
- if(erroresEncontrados.length == 0)
- {
- alert("El formulario es válido.");
- }
- else
- {
- var mensaje = "Se han encontrado los siguientes errores: \n"
- for (var aux=0; aux<=erroresEncontrados.length – 1; aux++)
- {
- mensaje += erroresEncontrados[aux][1] + "\n";
- this.elements[erroresEncontrados[aux][0]].style.borderColor = "#FF0000";
- }
- alert(mensaje);
- }
- };
- };
La posibilidad de crear efectos visuales es completamente ilimitada. Aquí pueden ver un ejemplo un poco más avanzado.
Nombres preestablecidos de IBForm
IBForm está preparado para validar la mayor parte de formularios. A continuación ud. verá un listado de los campos preestablecidos para facilitar el proceso de validación.
| Nombre del campo | Ejemplo | Validación | Mensaje de error | R?* |
|---|---|---|---|---|
| interesado_pNombre | <input type="text" name="interesado_pNombre" id="interesado_pNombre"/> |
Únicamente permite el ingreso de un nombre. Ejemplo: “Iván” | Por favor ingrese su nombre | Sí |
| interesado_pApellido | <input type="text" name="interesado_pApellido" id="interesado_pApellido"/> |
Similar al anterior, sólo permite el ingreso de un apellido. Ejemplo: “Bustos” | Por favor ingrese su apellido | Sí |
| interesado_pNombre_pApellido | <input type="text" name="interesado_pNombre_pApellido" id="interesado_pNombre_pApellido"/> |
Permite el ingreso de un nombre y un apellido. Ejemplo: “Iván Bustos” | Por favor ingrese su primer nombre y su primer apellido separados por un espacio. | Sí |
| interesado_nombreCompleto | <input type="text" name="interesado_nombreCompleto" id="interesado_nombreCompleto"/> |
Permite el ingreso de hasta 4 nombres y apellidos aceptando como mínimo 2. Ejemplo: “Iván Orlando Bustos” | Por favor ingrese sus nombres y apellidos separados por un espacio. | Sí |
| interesado_nombres | <input type="text" name="interesado_nombres" id="interesado_nombres"/> |
Permite el ingreso de hasta dos nombres. Ejemplo: “Iván Orlando” | Por favor ingrese sus nombres. | Sí |
| interesado_apellidos | <input type="text" name="interesado_apellidos" id="interesado_apellidos"/> |
Permite el ingreso de hasta dos apellidos. Ejemplo: “Bustos Torres” | Por favor ingrese sus apellidos. | Sí |
| interesado_correoElectronico | <input type="text" name="interesado_correoElectronico" id="interesado_correoElectronico"/> |
Basado principalmente en el Formato de Mensajería en Internet documento RCF 5322 que se puede accesar aquí. Permite el ingreso de un correo electrónico. Ejemplo: “ivan.bustos001@misitio.com.co” | Por favor ingrese su correo electrónico | Sí |
| interesado_sitioWeb | <input type="text" name="interesado_sitioWeb" id="interesado_sitioWeb"/> |
Acepta un Localizador Uniforme de Recursos (URL en inglés). Tenga en cuenta que no soporta cadenas de consulta (query strings en inglés). Ejemplos: “http://www.ivanbustos.com/” ,”www.ivanbustos.com”, “www.ivanbustos.com/”, “misubdominio.ivanbustos.com”, “ivanbustos.com”. Nota: El mensaje de error sólo aparecerá si el usuario intenta llenar este campo. |
Ingrese su sitio web correctamente. | No |
| interesado_comentario | <textarea cols="30" rows="10" name="interesado_comentario" id="interesado_comentario"/></textarea> |
Acepta un comentario sin límite de caracteres. Soporta únicamente caracteres en español. | Error: su comentario puede que esté vacío, esté muy largo o que contenga caracteres no permitidos. | Sí |
| interesado_nombreDeUsuario | <input type="text" name="interesado_sitioWeb" id="interesado_sitioWeb" maxlength="7" /> |
Acepta una combinación sin espacios de las letras del alfabeto anglosajón en mayúsculas o minúsculas junto con los números enteros del 0 al 9. Ejemplo: “vAncho17″ | Ingrese correctamente su nombre de usuario. | Sí |
| interesado_contrasena1 | |
Acepta cualquier combinación de caracteres exceptuando espacios. | Ingrese correctamente su contraseña. | Sí |
| interesado_contrasena2 | |
Mostrará error si y sólo si el valor del campo interesado_contrasena1 no es igual a interesado_contrasena2. Acepta cualquier combinación de caracteres exceptuando espacios. | Ambas contraseñas deben ser iguales. Por favor revise. | Sí |
| interesado_cedula | <input type="text" name="interesado_cedula" id="interesado_cedula"/> |
Basada en la cédula de ciudadanía Colombiana, acepta el ingreso de hasta nueve números consecutivos del 0 al 9. | Ingrese correctamente su cédula de ciudadanía sin usar puntos. | Sí |
| interesado_fechaDeNacimiento | <input type="text" name="interesado_fechaDeNacimiento" id="interesado_fechaDeNacimiento"/> |
Basado en el formato de fechas comunmente usado por hispanohablantes (Día/Mes/Año). Ejemplo: “01/10/2004″, “31/02/2010″. Nota: Recomiendo usar un calendario en javascript para evitar que el usuario ingrese manualmente la fecha. |
Ingrese correctamente su fecha de nacimiento por favor. | Sí |
| interesado_telefono | <input type="text" name="interesado_telefono" id="interesado_telefono"/> |
Acepta los Formatos colombianos para celulares, teléfonos fijos junto con su indicativo departamental. Ejemplos: “+1 314 213 21 45″, “+13142132145″, “2744239″ | Ingrese correctamente su teléfono por favor. | Sí |
| interesado_sexo | <select name="interesado_sexo" id="interesado_sexo"></select> |
IBForm automáticamente poblará el campo de selección. Basado en el estándar ISO 5218:1977 Information interchange — Representation of human sexes disponible aquí, asignará a masculino un valor de 1, y femenino un valor de 2. | Seleccione por favor un sexo. | Sí |
| casa_direccion1 | <input type="text" name="casa_direccion1" id="casa_direccion1" maxlength="50" /> |
Acepta una combinación de caracteres hispanos y espacios. | Ingrese correctamente la dirección de su lugar de residencia por favor. | Sí |
| casa_direccion2 | <input type="text" name="casa_direccion2" id="casa_direccion2" maxlength="30" /> |
Acepta una combinación de caracteres hispanos y espacios. Usar para segundas líneas en direcciones. Generalmente para indicar el número de apartamento o suite. En Colombia por el momento no es necesario. | La segunda línea de la dirección de su lugar de residencia tiene caracteres inválidos. Revise por favor. | No |
| casa_direccionEstandar | <input type="text" name="casa_direccionEstandar" id="casa_direccionEstandar" /> |
No recomiendo su uso con fines comerciales ya que es algo puramente experimental. Basado en el Estándar de las Direcciones Urbanas para los Equipamientos del Sector Educativo del Instituto Geográfico Agustín Codazzi y el Ministerio de Educación Colombiano. Ver detalles de la nomenclatura en este documento pdf. Ejemplos: “KR 110 A 86 B 28 MZ 19″, “AV CARACAS 13 15″, “BR LAS ACACIAS MZ D LO 9″ |
Por favor ingrese la dirección de su lugar de residencia según el formato del Instituto Geográfico Agustín Codazzi. | Sí |
| casa_localidad | <input type="text" name="casa_localidad" id="casa_localidad" /> |
Creado para validar el nombre de una ciudad, un pueblo o similares. | Ingrese el nombre de la localidad de su lugar de residencia (ciudad, pueblo, municipio) por favor. | Sí |
| casa_codigoPostal | <input type="text" name="casa_codigoPostal" id="casa_codigoPostal" /> |
Valida 6 números consecutivos que forman el nuevo código postal Colombiano. Consulte su código postal en el sitio web de la Red Postal de Colombia 4-72. Ejemplo: “110931″. | Ingrese el Código Postal Colombiano de su lugar de residencia por favor. | Sí |
| casa_telefono | <input type="text" name="casa_telefono" id="casa_telefono"/> |
Acepta los Formatos colombianos para celulares, teléfonos fijos junto con su indicativo departamental. Ejemplos: “+1 314 213 21 45″, “+13142132145″, “2744239″ | Ingrese correctamente el teléfono de su lugar de residencia por favor. | Sí |
| casa_departamento | <select name="casa_departamento" id="casa_departamento"></select> |
IBForm automaticamente poblará el campo de selección de la siguiente manera: <option value="amazonas">Amazonas</option> <option value="antioquia">Antioquia</option> <option value="arauca">Arauca</option> <option value="atlantico">Atlántico</option> <option value="bolivar">Bolívar</option> <option value="boyaca">Boyacá</option> <option value="caldas">Caldas</option> <option value="caqueta">Caquetá</option> <option value="casanare">Casanare</option> <option value="cauca">Cauca</option> <option value="cesar">Cesar</option> <option value="choco">Chocó</option> <option value="cordoba">Córdoba</option> <option value="cundinamarca">Cundinamarca</option> <option value="guainia">Guainía</option> <option value="guaviare">Guaviare</option> <option value="huila">Huila</option> <option value="guajira">La Guajira</option> <option value="magdalena">Magdalena</option> <option value="meta">Meta</option> <option value="narino">Nariño</option> <option value="nortesantander">Norte de Santander</option> <option value="putumayo">Putumayo</option> <option value="quindio">Quindío</option> <option value="risaralda">Risaralda</option> <option value="sanandres">San Andrés y Providencia</option> <option value="santander">Santander</option> <option value="sucre">Sucre</option> <option value="tolima">Tolima</option> <option value="valle">Valle del Cauca</option> <option value="vaupes">Vaupés</option> <option value="vichada">Vichada</option> |
Seleccione por favor el departamento donde se encuentra ubicado su lugar de residencia. | Sí |
| trabajo_direccion1 | <input type="text" name="trabajo_direccion1" id="trabajo_direccion1" maxlength="50" /> |
Acepta una combinación de caracteres hispanos y espacios. | Ingrese correctamente la dirección de su sitio de trabajo por favor. | No |
| trabajo_direccion2 | <input type="text" name="trabajo_direccion2" id="trabajo_direccion2" maxlength="30" /> |
Acepta una combinación de caracteres hispanos y espacios. Usar para segundas líneas en direcciones. Generalmente para indicar el número de apartamento o suite. En Colombia por el momento no es necesario. | La segunda línea de la dirección de su sitio de trabajo tiene caracteres inválidos. Revise por favor. | No |
| trabajo_direccionEstandar | <input type="text" name="trabajo_direccionEstandar" id="trabajo_direccionEstandar" /> |
No recomiendo su uso con fines comerciales ya que es algo puramente experimental. Basado en el Estándar de las Direcciones Urbanas para los Equipamientos del Sector Educativo del Instituto Geográfico Agustín Codazzi y el Ministerio de Educación Colombiano. Ver detalles de la nomenclatura en este documento pdf. Ejemplos: “KR 110 A 86 B 28 MZ 19″, “AV CARACAS 13 15″, “BR LAS ACACIAS MZ D LO 9″ |
Por favor ingrese la dirección de su sitio de trabajo según el formato del Instituto Geográfico Agustín Codazzi. | No |
| trabajo_localidad | <input type="text" name="trabajo_localidad" id="trabajo_localidad" /> |
Creado para validar el nombre de una ciudad, un pueblo o similares. | Ingrese el nombre de la localidad de su sitio de trabajo (ciudad, pueblo, municipio) por favor. | No |
| trabajo_codigoPostal | <input type="text" name="trabajo_codigoPostal" id="trabajo_codigoPostal" /> |
Valida 6 números consecutivos que forman el nuevo código postal Colombiano. Consulte su código postal en el sitio web de la Red Postal de Colombia 4-72. Ejemplo: “110931″. | Ingrese el Código Postal Colombiano de su sitio de trabajo por favor. | No |
| trabajo_telefono | <input type="text" name="trabajo_telefono" id="trabajo_telefono"/> |
Acepta los Formatos colombianos para celulares, teléfonos fijos junto con su indicativo departamental. Ejemplos: “+1 314 213 21 45″, “+13142132145″, “2744239″ | Ingrese correctamente el teléfono de su sitio de trabajo por favor. | No |
| trabajo_departamento | <select name="trabajo_departamento" id="trabajo_departamento"></select> |
IBForm automaticamente poblará el campo de selección de la misma manera en que lo hace casa_departamento. | Seleccione por favor el departamento donde se encuentra ubicado su sitio de trabajo | Sí |
| envio_direccion1 | <input type="text" name="envio_direccion1" id="trabajo_direccion1" maxlength="50" /> |
Acepta una combinación de caracteres hispanos y espacios. | Ingrese correctamente la dirección de envío correctamente por favor. | Sí |
| envio_direccion2 | <input type="text" name="envio_direccion2" id="envio_direccion2" maxlength="30" /> |
Acepta una combinación de caracteres hispanos y espacios. Usar para segundas líneas en direcciones. Generalmente para indicar el número de apartamento o suite. En Colombia por el momento no es necesario. | La segunda línea de la dirección de envío tiene caracteres inválidos. Revise por favor. | No |
| envio_direccionEstandar | <input type="text" name="envio_direccionEstandar" id="envio_direccionEstandar" /> |
No recomiendo su uso con fines comerciales ya que es algo puramente experimental. Basado en el Estándar de las Direcciones Urbanas para los Equipamientos del Sector Educativo del Instituto Geográfico Agustín Codazzi y el Ministerio de Educación Colombiano. Ver detalles de la nomenclatura en este documento pdf. Ejemplos: “KR 110 A 86 B 28 MZ 19″, “AV CARACAS 13 15″, “BR LAS ACACIAS MZ D LO 9″ |
Por favor ingrese la dirección de envío según el formato del Instituto Geográfico Agustín Codazzi. | Sí |
| envio_localidad | <input type="text" name="envio_localidad" id="envio_localidad" /> |
Creado para validar el nombre de una ciudad, un pueblo o similares. | Ingrese el nombre de la localidad de envío (ciudad, pueblo, municipio) por favor. | Sí |
| envio_codigoPostal | <input type="text" name="envio_codigoPostal" id="envio_codigoPostal" /> |
Valida 6 números consecutivos que forman el nuevo código postal Colombiano. Consulte su código postal en el sitio web de la Red Postal de Colombia 4-72. Ejemplo: “110931″. | Ingrese el Código Postal Colombiano del sitio de envío por favor. | Sí |
| envio_telefono | <input type="text" name="envio_telefono" id="envio_telefono"/> |
Acepta los Formatos colombianos para celulares, teléfonos fijos junto con su indicativo departamental. Ejemplos: “+1 314 213 21 45″, “+13142132145″, “2744239″ | Ingrese correctamente el teléfono del lugar de envío por favor. | Sí |
| envio_departamento | <select name="envio_departamento" id="envio_departamento"></select> |
IBForm automaticamente poblará el campo de selección de la misma manera en que lo hace casa_departamento. | Seleccione por favor el departamento del sitio de envío. | Sí |
| pago_direccion1 | <input type="text" name="pago_direccion1" id="pago_direccion1" maxlength="50" /> |
Acepta una combinación de caracteres hispanos y espacios. | Ingrese correctamente la dirección del comprador correctamente por favor. | Sí |
| pago_direccion2 | <input type="text" name="pago_direccion2" id="pago_direccion2" maxlength="30" /> |
Acepta una combinación de caracteres hispanos y espacios. Usar para segundas líneas en direcciones. Generalmente para indicar el número de apartamento o suite. En Colombia por el momento no es necesario. | La segunda línea de la dirección del comprador tiene caracteres inválidos. Revise por favor. | Sí |
| pago_direccionEstandar | <input type="text" name="pago_direccionEstandar" id="pago_direccionEstandar" /> |
No recomiendo su uso con fines comerciales ya que es algo puramente experimental. Basado en el Estándar de las Direcciones Urbanas para los Equipamientos del Sector Educativo del Instituto Geográfico Agustín Codazzi y el Ministerio de Educación Colombiano. Ver detalles de la nomenclatura en este documento pdf. Ejemplos: “KR 110 A 86 B 28 MZ 19″, “AV CARACAS 13 15″, “BR LAS ACACIAS MZ D LO 9″ |
Por favor ingrese la dirección del comprador según el formato del Instituto Geográfico Agustín Codazzi. | Sí |
| pago_localidad | <input type="text" name="pago_localidad" id="pago_localidad" /> |
Creado para validar el nombre de una ciudad, un pueblo o similares. | Ingrese el nombre de la localidad del comprador (ciudad, pueblo, municipio) por favor. | Sí |
| pago_codigoPostal | <input type="text" name="pago_codigoPostal" id="pago_codigoPostal" /> |
Valida 6 números consecutivos que forman el nuevo código postal Colombiano. Consulte su código postal en el sitio web de la Red Postal de Colombia 4-72. Ejemplo: “110931″. | Ingrese el Código Postal Colombiano del comprador por favor. | Sí |
| pago_departamento | <select name="pago_departamento" id="pago_departamento"></select> |
IBForm automaticamente poblará el campo de selección de la misma manera en que lo hace casa_departamento. | Seleccione por favor el departamento del comprador. | Sí |
| tarjeta_numero | <input type="text" name="tarjeta_numero" id="tarjeta_numero" /> |
Acepta hasta 9 números consecutivos del 1 al 9. | Ingrese correctamente el número de su tarjeta de crédito/débito sin espacios por favor. | Sí |
| tarjeta_titular | <input type="text" name="tarjeta_titular" id="tarjeta_titular" /> |
Similar a interesado_nombreCompleto, acepta un nombre completo. | Ingrese correctamente el titular de su tarjeta de crédito/débito sin espacios por favor. | Sí |
| tarjeta_tipo | <select name="tarjeta_tipo" id="tarjeta_tipo"></select> |
IBForm automáticamente poblará el campo de selección de la siguiente manera: <option value="visa">Visa</option> <option value="mastercard">MasterCard</option> <option value="american">American Express</option> <option value="diners">Diners Club</option> |
Seleccione por favor el tipo de tarjeta de pago. | Sí |
Agregando campos personalizados
Si el campo que usted desea validar no se encuentra en la lista anterior, es fácil crear su propio campo completamente a su gusto con tan sólo una línea de código por medio de la función addCustomInput de IBForm cuya sintaxis es la siguiente:
objetoIBForm.addCustomInput(fieldName, fieldType, regularExpression, errorMessage, isRequired)
Definición de parámetros:
fieldName: Requerido. Acepta una cadena de texto (string) que deberá coincidir con el nombre del campo en el formulario que desea validar.fieldType: Requerido. Acepta los siguientes: “text”, “textarea”, “select-one”regularExpression: Requerido . Acepta una expresión regular para procesar la validación del campo.errorMessage: Requerido. Una cadena de texto donde se almacena el mensaje de error.isRequired: Requerido. Verdadero o Falso. Determina si el campo es requerido.
Para ilustrarlo con un ejemplo, al HTML del ejemplo original le he agregado un campo adicional que me permita validar números del seguro social estadounidense ya que el formulario será usado por visitantes de esa región. En adición, también requiero que el visitante seleccione su color favorito entre una lista de colores de la bandera Colombiana.
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <script type="text/javascript" defer="defer" src="IBForm-0.07.min.js"></script>
- <script type="text/javascript" defer="defer" src="validacion.js"></script>
- <title>Demostración de IBForm</title></head>
- <body>
- <h1>Formulario experimental: Direcciones en formato estándar</h1>
- <form action="#" method="post">
- <p><label for="interesado_pNombre_pApellido">Ingrese su nombre:</label><input type="text" name="interesado_pNombre_pApellido" id="interesado_pNombre_pApellido"/></p>
- <p><label for="interesado_correoElectronico">Ingrese su correo:</label><input type="text" name="interesado_correoElectronico" id="interesado_correoElectronico"/></p>
- <p><label for="numeroSocialUSA">Ingrese su número de seguro social Estadounidense:</label><input type="text" name="numeroSocialUSA" id="numeroSocialUSA""/></p>
- <p><label for="colorFavorito">Seleccione su color favorito:</label><select name="colorFavorito" id="colorFavorito"><option value="ninguno" selected="selected">Seleccione uno</option><option value="amarillo">Amarillo</option><option value="azul">Azul</option><option value="Rojo">Rojo</option></select></p>
- <p><label for="casa_departamento">Seleccione departamento:</label><select name="casa_departamento" id="casa_departamento"></select></p>
- <p><label for="interesado_comentario">Ingrese su comentario:</label></p>
- <p><textarea rows="5" cols="30" name="interesado_comentario" id="interesado_comentario"></textarea></p>
- <p><input class="button" type="submit" value="Enviar" /></p>
- </form>
- </body>
- </html>
Para validarlo, simplemente agrego las siguiente dos línea en mi archivo validación.js. Note que el campo de selección no requiere de ninguna Expressión Regular.
- window.onload =
- function()
- {
- var miFormularioIBForm = new IBForm(window.document.forms[0]);
- miFormularioIBForm.addCustomInput("numeroSocialUSA","text",/^[0-9]{3}-[0-9]{2}-[0-9]{4}/,"Por favor ingrese su número social",true);
- miFormularioIBForm.addCustomInput("colorFavorito","select-one","","Por favor seleccione su color favorito",true);
- window.document.forms[0].onsubmit =
- function(event)
- {
- var evt = event || window.event;
- if (evt.preventDefault)
- {
- evt.preventDefault();
- }
- else
- {
- evt.returnValue = false;
- evt.cancelBubble = true;
- }
- var erroresEncontrados = new Array();
- erroresEncontrados = miFormularioIBForm.validate();
- if(erroresEncontrados.length == 0)
- {
- alert("El formulario es válido.");
- }
- else
- {
- var mensaje = "Se han encontrado los siguientes errores: \n"
- for (var aux=0; aux<=erroresEncontrados.length – 1; aux++)
- {
- mensaje += erroresEncontrados[aux][1] + "\n";
- this.elements[erroresEncontrados[aux][0]].style.borderColor = "#FF0000";
- }
- alert(mensaje);
- }
- };
- };
Si tiene algún comentario, pregunta o insulto acerca de IBForm no dude por favor en escribirme a través de mi formulario de contacto.