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.

13 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
  7. Como debería ser una expresión regular que permita hasta 10 caracteres alfanuméricos en minúscula de la "a" a la "z" y números del "0" al "9", por ejemplo: "alfa2" ó "45flores"?
    Muchas gracias

    ResponderEliminar
    Respuestas
    1. Aporte de Bill Wilkinson....
      ^[a-z][a-z0-9]{0,9}$

      Eliminar
  8. Como podria validar una fecha, teniendo en cuenta que tengo fecha inicial y fecha final y la fecha final no puedes ser inferior a la fecha inicial?

    ResponderEliminar