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.

código javascript
/* 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:

código javascript
/* 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 ;).



Publicidad

Aviso: Los siguientes comentarios pertenecen a las personas que los han enviado.
El administrador de este sitio web no es responsable de los mismos.

[comentarios] Hay 2 comentarios:

Gravatar
15/11/2005 17:15:17
Ya puestos...
por r0sk (IP: 217.130.44.*)
Comentario de r0sk
... 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}$';
Gravatar
15/11/2005 17:22:36
No estoy seguro
por Juanjo (IP: 192.168.0.*)
Comentario de Juanjo
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).

! Esta entrada no permite nuevos comentarios.

Los comentarios se bloquean automáticamente tras 15 días desde la publicación del artículo.

Si deseas comentar algo relacionado con el texto, puedes enviarme un e-mail.