COMPUTACIN II
PRCTICA N 18
VALIDAR DATOS EN HTML 5
La validacin de los campos de un formulario es una tarea de programacin necesaria, aunque muchas
veces es un proceso molesto. Para ejecutar la validacin por parte del cliente siempre debemos recurrir
a scripts, habitualmente en lenguaje JavaScript o emplear alguna librera para verificar que las entradas
son del tipo correcto y que estn completas con datos, antes de que el formulario sea enviado. En
HTML5 los nuevos atributos de las entradas como required y pattern usados en combinacin con
selectores de CSS, facilitan la programacin y mejora de la interfaz del usuario.
a) Validacin: atributo required
Si el atributo required est presente, entonces el campo debe contener necesariamente un valor al
ser enviado. Por ejemplo:
El atributo pattern especifica una expresin regular usada para validar los campos de entrada. Por
ejemplo, si se supone que la entrada ha de tener el siguiente formato: 3 letras en maysculas
seguidas de 4 nmeros. El uso de required y pattern asegura que la entrada debe ser rellenada
siguiendo la expresin regular. Al situarse el usuario sobre la entrada, el mensaje en el
atributo title se muestra.
Utilizando el ejemplo anterior se puede hacer que la entrada aparezca en color rojo si el valor ingresado
no cumple con la expresin regular. Para hacerlo hay que combinar CSS:
invalid {
border: 2px solid #ff0000;
}
c) Validacin: atributo formnovalidate
El atributo formnovalidate puede ser aplicado en input y button. Si est presente, la validacin
queda sin efecto. En el siguiente ejemplo tenemos dos botones, uno donde se realiza la validacin
y otro en el que no.
<!DOCTYPE html>
<html lang=es>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Validar formularios con HTML5 y CSS3</title>
<style type="text/css">
form#pago {
margin:auto;
background: Green;
color: white;
font-size: 12px;
form#pago fieldset {
border: none;
}
form#pago input{
font-size:12px;
background: yellow;
border:solid 1px Green;
border-radius: 3px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
float: right;
margin-right: 15px;
width: 200px;
}
form#pago ol li {
line-height: 25px;
list-style: none;
}
form#pago [required]{
border:solid 1px red;
}
input:required {
outline: 1px solid red;
}
</style>
</head>
<body>
<form id="pago">
<fieldset>
<legend>Datos del comprador</legend>
<ol>
<li>
<label for="nombre">Nombre</label>
<input id="nombre" name="nombre" type="text" placeholder="Escribe tu nombre completo" required
autofocus>
</li>
<li>
<label for="email">Email</label>
<input id="email" name="email" type="email" placeholder="ejemplo@um.es" required>
</li>
<li>
<label for="telefono">Telfono</label>
<input id="telefono" name="telefono" type="tel" placeholder="Ej. +34668899999" required>
</li>
<li>
<label for="pais">Pas</label>
<input id="pais" name="pais" type="text" required>
</li>
</ol>
Prof. Luis David Sana Gutirrez Pgina 52
CETPRO LA INMACULADA
COMPUTACIN II
</fieldset>
<fieldset>
<legend>Datos de tarjeta de crdito o dbito</legend>
<ol>
<li>
<label for="numtarjeta">Nmero</label>
<input id="numtarjeta" name="numtarjeta" type="number" placeholder="Ej. 5555-4444-3333-2222"
required>
</li>
<li>
<label for="nomtarjeta">Nombre</label>
<input id="nomtarjeta" name="nomtarjeta" type="text" placeholder="Nombre que figura en la
tarjeta" required>
</li>
</ol>
</fieldset>
-------------------------------------------------
<fieldset>
<button type="submit">Confirmar pedido</button>
</fieldset>
</form>
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
<title>Validacin de un formulario con JavaScript</title>
<script type="text/javascript">
function valida(f) {
var ok = true;
var msg = "Debes escribir contenido en los campos:\n";
if(f.elements[0].value == "")
{
msg += "- Marca 1\n";
ok = false;
}
if(f.elements["marca2"].value == "")
{
msg += "- Marca 2\n";
ok = false;
}
if(f.marca3.value == "")
{
msg += "- Marca 3\n";
ok = false;
}
if(ok == false)
alert(msg);
return ok;
}
</script>
</head>
<body lang="es">
Introduce tus marcas de coches favoritas<br>
<form id="miFormulario" action="" method="get" onsubmit="return valida(this)">
Prof. Luis David Sana Gutirrez Pgina 53
CETPRO LA INMACULADA
COMPUTACIN II
<p>
Marca 1: <input type="text" id="marca1" />
<br />
Marca 2: <input type="text" id="marca2" />
<br />
Marca 3: <input type="text" id="marca3" />
<br />
<input type="submit" value="Enviar" />
<input type="reset" value="Borrar" />
</p>
</form>
</body>
</html>
Cuando se llama a la funcin valida() desde el evento onsubmit se le pasa como valor del
parmetro this, que es un objeto que representa al formulario desde el que se invoca al mtodo. En
este ejemplo, se ha empleado el atributo id en vez del atributo name para identificar cada elemento, ya
que XHTML 1.0 no permite el empleo del atributo name en la etiqueta<form>.
La funcin valida() debe devolver true o false segn la validacin haya sido correcta o haya fallado.
Este valor debe ser devuelto al navegador: el valor true significa "contina y enva el formulario al
servidor", mientras que false significa "cancelar y no enviar el formulario". Por ello, en el cdigo se
debe escribir onsubmit="return valida(this)" para reenviar el valor devuelto al navegador.
<!DOCTYPE HTML>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="description" content="Este es un formulario simple validado en el Font-End con
JavaScript">
<meta name="keywords" content="Formulario, validacion con JavaScript, etc.">
<title>Formulario</title>
<link rel="stylesheet" href="css/estilo.css" />
</head>
<body>
<section id="contenedor">
<h1>Validación de un formulario con JS en el Front-End</h1>
<!-- el nombre enviar.php puede ser cualquier archivo de lenguaje de programacin no solo
.php -->
<label for="direccion">Dirección:</label><br/>
<input type="text" name="direccion" id="direccion"/><br/>
<label for="pais">País:</label><br/>
<input type="text" name="pais" id="pais"/><br/>
<label for="email">Email:</label><br/>
<input type="text" name="email" id="email"/><br/>
function validarFormulario(){
var verificar=true;
var expRegNombres =/^[A-Za-z]{1,}([\s][A-Za-z]{1,})+$/;
var expRegPais = /^[a-z\s]*$/i;
var expRegEmail = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
var expRegUrl= /^(http|https|ftp)+\:+\/\/+(www\.|)+[a-z0-9\-\.]+([a-z\.]|)+\.[a-z]{2,4}$/i;
var expRegTelefono=/^([0-9]\s*)*$/;
var formulario = document.getElementById("formulario");
var nombres = document.getElementById("nombres");
var direccion = document.getElementById("direccion");
Prof. Luis David Sana Gutirrez Pgina 56
CETPRO LA INMACULADA
COMPUTACIN II
var pais = document.getElementById("pais");
var email = document.getElementById("email");
var webSite= document.getElementById("web-site");
var telefono = document.getElementById("telefono");
var comentario = document.getElementById("comentario");
if(!nombres.value){
alert("Escriba sus nombres por favor.");
nombres.focus();
verificar=false;
return false;
}
else if(nombres.value.split(" ").length < 2){
alert("Esciba sus nombres completos por favor.");
nombres.focus();
verificar=false;
return false;
}
else if(!expRegNombres.exec(nombres.value)){
alert("Este campo admite letras de la a-zA-Z, y no admite espacios en blanco
al final.");
nombres.focus();
verificar=false;
return false;
}
else if(!direccion.value){
alert("Escriba su direcci\u00F3n por favor.");
direccion.focus();
verificar=false;
return false;
}
else if(!pais.value){
alert("Escriba el nombre del pa\u00EDs que nos visita por favor.");
pais.focus();
verificar=false;
return false;
}
else if(!expRegPais.exec(pais.value)){
alert("Escriba de que pa\u00EDs nos visita sin n\u00FAmeros ni caracteres especiales como [+
* , . - _ { } ...].");
pais.focus();
verificar=false;
return false;
}
else if(!email.value){
alert("Escriba su email por favor.");
email.focus();
verificar=false;
return false;
}
else if(!expRegEmail.exec(email.value)){
alert("Escriba un email valido por favor.");
email.focus();
verificar=false;
return false;
}
else if((webSite.value!="")&& !expRegUrl.exec(webSite.value)){
alert("Escriba un formato de sitio web valido por favor.");
webSite.focus();
verificar=false;
return false;
}
else if(!telefono.value){
alert("Escriba un n\u00famero de tel\u00E9fono por favor.");
Prof. Luis David Sana Gutirrez Pgina 57
CETPRO LA INMACULADA
COMPUTACIN II
telefono.focus();
verificar=false;
return false;
}
else if(!expRegTelefono.exec(telefono.value)){
alert("el campo tel\u00E9fono admite n\u00FAmeros y espacios en blanco.");
telefono.focus();
verificar=false;
return false;
}
else if(!comentario.value){
alert("el campo comentarios es requerido");
comentario.focus();
verificar=false;
return false;
}
else if(comentario.value.length > 1000){
alert("El campo comentarios no puede tener mas de 1000 caracteres.");
comentario.focus();
verificar=false;
return false;
}
if(verificar==true){
document.formulario.submit();
}
}
function limpiarFormulario(){
document.getElementById("formulario").reset();
}
function calcular(){
var contadorChar= document.getElementById("contador-char").innerHTML=1000
-document.formulario.comentario.value.length;
}
window.onload=function(){
var botonLimpiar=document.getElementById("limpiar");
botonLimpiar.onclick=limpiarFormulario;
var botonEnviar=document.getElementById("enviar");
botonEnviar.onclick=validarFormulario;
}