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.


Dirección de correo electrónico

Vamos a definit una expresión regular para comprobar una dirección de correo electrónico:

En primer lugar definimos todo lo que hay a la izquierda de la @:

Será una serie de caracteres alfanuméricos, un posible carácter de separación y otra serie de caracteres alfanuméricos opcional. Con esto se verifican valores como:

aaa

aaa-bbb

aaa.bbb

aaa_bbb

aaa_bbb_ccc

Esta primera parte quedaría como:

([0-9a-zA-Z]+)([._-]([0-9a-zA-Z]+))*

A continuación, después del literal @ el nombre del dominio que se construye de una forma similar al nombre del usuario y al que le añadimos un dominio de nivel superior que consta de 2 a 4 caracteres.

La parte del dominio sería:

([0-9a-zA-Z]+)([._-]([0-9a-zA-Z]+))*[.]([0-9a-zA-Z]){2,4}

Ahora todo junto, y le añadimos el comienzo y fin de línea:

"^([0-9a-zA-Z]+)([._-]([0-9a-zA-Z]+))*@([0-9a-zA-Z]+)([._-]([0-9a-zA-Z]+))*[.]([0-9a-zA-Z]){2,4}$"