Google
Web dns.bdat.net

Construyendo expresiones regulares: ejemplos

Sintaxis de fecha del tipo dd/mm/aa

En este ejemplo sólo pretendemos comprobar que la sintaxis de la fecha es correcta, es decir que estábien construida independientemente de que la fecha sea realmente válida.

En una primera aproximación sólo comprobaremos que tenemos seis dígitos separados por "/".

/[0-9]{2}\/[0-9]{2}[0-9]{2}\/[0-9]{2}/
              

Usamos como separador de la expresión regular el carácter "/". Entonces los caracteres "/" propios del formato de fecha tienen que ir protegidos mediante la contrabarra ("\"). El resto de la expresión consiste en indicar que tenemos dos dígitos.

Esta expresión no verificará fechas del tipo 2/3/07, ya que según la definición obligamos a tener dos dígitos por componente. Para mejorarla exigiremos que los componentes correspondientes al dia y al mes puedan tener uno o dos dígitos:

/[0-9]{1,2}\/[0-9]{1,2}[0-9]{2}\/[0-9]{2}/
              

No obstante seguirían siendo valores de fecha aceptados 9/99/07. Para afinar un poco más la expresión tendríamos que exigir que el mes no pudiera ser mayor que 12 y el día no mayor que 31:

En el caso del mes pondríamos

\/([1-9]|1[012])\/
              

es decir o tenenemos un solo dígito que va del 1 al 9 o tenemos dos, de forma que el primer es un 1 fijo y el segundo puede ser 0, 1 ó 2.

En el caso del día, y con una razonamiento similar pondríamos:

\/([1-9]|[12][0-9]|3[01])\/
              

es decir el día es un solo dígito del 0 al 9, o dos dígitos donde el primero es 1 ó 2 y el segundo cualquiera entre el 0 y el 9 y por último un dígito que puede ser 3 y seguido de un 1 o un 2.

Ahora todo junto quedaría como

/\/([1-9]|[12][0-9]|3[01])\/\/([1-9]|1[012])\/[0-9]{2}/
              

Es importante observar como el carácter "|" permite seleccionar alternativas de concordancia.

Por último, si quisiéramos que también fuer válida una fecha como 01/02/08, la expresión quedaría como:

/\/(0?[1-9]|[12][0-9]|3[01])\/\/(0?[1-9]|1[012])\/[0-9]{2}/
              

Es decir, añadiendo "0?" estamos diciendo que el "0" puede o no estar presente.