15 de Noviembre, 2005

Verificando con expresiones regulares

Las expresiones regulares son una de esas cosas que convendría saber utilizar a buen nivel y no hay manera :(. Bueno, un poquito sí me aclaro :P.

Veamos un ejemplo práctico en Javascript: supongamos que tenemos que verificar que el usuario ha introducido una fecha en formato DD/MM/AAAA. Pues nada más sencillo.

/* esto es Javascript */
re=/^[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]$/
	
if(!re.exec(document.getElementById("fecha").value))
{
	alert("La fecha no tiene formato DD/MM/AAAA")
	document.getElementById("fecha").focus()
}
else
	alert("Fecha en formato correcto")

Veamos cómo queda:

Fecha:

Si además queremos obtener los diferentes valores, pues podemos modificar la expresión regular de la siguiente forma:

/* esto es Javascript */
re=/^([0-9][0-9])\/([0-9][0-9])\/([0-9][0-9][0-9][0-9])$/
	
vect=re.exec(document.getElementById("fecha").value)
alert("Todo: " + vect[0] + "\nDía:" + vect[1] + "\nMes" + vect[2]
	+ "\nAño:" + vect[3])

Sí, en realidad es tan potente como parece. Y también tan complicado :).

Herramientas de sobra conocidas usan expresiones regulares, como sed(1) o awk(1), y además las tenemos disponibles en muchos lenguajes de programación, como C, Perl, PHP, ... e incluso Javascript ;).

Anotación por Juan J. Martínez, clasificada en: javascript.

Hay 2 comentarios

Gravatar

... podríamos verificar que en el mes es de 1 a 12 y los días de 1 a 31, aunque sin correlación entre ambos también podrían salir fechas no válidas: 31/02/2005.

Yo hago algo similar con las IP's, pero tampoco es válido del todo:

$regex = '^[0-9]{3,3}\.[0-9]{3,3}\.[0-9]{3,3}\.[0-9]{3,3}$';

por r0sk, en 2005-11-15 17:15:17

Gravatar

Los de máximo y mínimo con las llaves no me he fiado, aunque probablemente funcione con las expresiones regulares que implementa Javascript. Lo que es seguro es que queda más claro no usarlas para el ejemplo ;)

Ya lo de verificar rangos vía expresión regular... lo veo más jodido. El [0-9] indica 'caracteres del 0 al 9', pero indicar las combinaciones (1, 2, 3, 4, 5, ..., 10, 11, 12 para meses, por ejemplo), ahora mismo no se me ocurre una forma sencilla de hacerlo (es decir, más sencilla que comparar intervalos con cada valor del vector obtenido en el ejemplo 2).

por Juanjo, en 2005-11-15 17:22:36

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: