Ya comenté cómo verificar la entrada del usuario empleando expresiones regulares con Javascript. En aquel ejemplo nos asegurábamos de que la fecha proporcionada por el usuario se ajustaba a un patrón (dd/mm/aaaa), pero no comprobábamos que el valor introducido fuera válido. Por ejemplo: 30/02/2006, se ajusta al patrón pero no es una fecha válida.
Si buscamos en Internet seguro que encontramos muchas funciones, largas y elaboradas, que hacen más o menos el complicado trabajo de la comprobación. Ayer se me ocurrió una forma muy fácil de hacerlo, y es empleando el objeto Date y su función setFullYear.
Con dicha función podemos indicar una fecha con el día, el mes y el año como entrada, y si los valores son erróneos, la función dará una aproximación. Así si comprobamos que la fecha creada no es igual a la introducida por el usuario, se ha producido la citada aproximación, y podemos concluir que la fecha indicada por el usuario no es válida.
/* la forma de verificar el formato es la que ya comentamos */ re=/^[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]$/ if(f.length==0 || !re.exec(f)) { alert("La fecha no tiene formato correcto.") return } /* comprobamos que la fecha es válida */ var d = new Date() /* la función tiene como entrada: año, mes, día */ d.setFullYear(f.substring(6,10), f.substring(3,5)-1, f.substring(0,2)) /* ¿el mes del objeto Date es el mes introducido por el usuario? OJO: getMonth() devuelve el número de mes del 0 al 11 ¿el día del objeto Date es el día introducido por el usuario? OJO: getDate() devuelve el día del mes */ if(d.getMonth() != f.substring(3,5)-1 || d.getDate() != f.substring(0,2)) { alert("Fecha no válida.") return }
Veamos cómo queda:
Fecha:
Es una forma efectiva y cómoda de hacer la comprobación de la validez de la fecha, porque eso de mirar el mes para comprobar que el día está en rango, calcular los casos de años bisiestos para Febrero, etc; es un rollo ;).
Actualización: Resulta que el parseInt no convertía algunas cadenas númericas como se esperaba. La conversión de tipos automática de Javascript vía operadores sí funciona. Gracias a los provadores ;).

![[xml]](/images/xml.gif)
