2010/07/11

Validación de fechas con expresiones regulares (Regular Expression)

Para validar fechas en un textbox a traves de expresiones regulares podemos hacer uso de las siguientes simples expresiones:

Formato (MM/dd/yyyy):
([1-9]|1[012])[- /.]([1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d

Formato (dd/MM/yyyy):
(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d

Por supuesto estas validaciones son muy básicas, y no contempla la cantidad de días del mes así como tampoco el manejo de años bisiestos, por ello, para validaciones mas estrictas podemos usar las siguientes expresiones regulares bastante mas complejas:

Formato (MM/dd/yyyy):
^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$

Formato (dd/MM/yyyy):
^(?:(?:0?[1-9]|1\d|2[0-8])(\/|-)(?:0?[1-9]|1[0-2]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:31(\/|-)(?:0?[13578]|1[02]))|(?:(?:29|30)(\/|-)(?:0?[1,3-9]|1[0-2])))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(29(\/|-)0?2)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$

Considerar en caso de usar javascript para la validación el costo computacional en el cliente de una expresión y otra.

10 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Formato dd/mm/yyyy
    ^(0?[1-9]|[12][0-9]|3[01])[\/](0?[1-9]|1[012])[\/](19|20)\d{2}$

    faltaba validar el año 4 digitos

    ResponderEliminar
  3. Formato Rut Chileno
    ^\d{1,2}(\.|)\d{3}(\.|)\d{3}[(-|)][0-9kK]{1}$

    ResponderEliminar
  4. Gracias por el aporte, fue de gran ayuda para validar las fechas :) :)

    ResponderEliminar
  5. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  6. Este comentario ha sido eliminado por el autor.

    ResponderEliminar