Continuando con las expresiones regulares, para validar fechas se puede utilizar la siguiente función en ASP:

function esValidoFecha(cadena)
  set expReg = New RegExp
  expReg.Pattern = "^(((0[1-9]|[12][0-9]|3[01])([/])(0[13578]|10|12)([/])_
                    (\d{4}))|(([0][1-9]|[12][0-9]|30)([/])(0[469]|11)_
                    ([/])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([/])(02)([/])_
                    (\d{4}))|((29)(\.|-|\/)(02)([/])([02468][048]00))|_
                    ((29)([/])(02)([/])([13579][26]00))|((29)([/])(02)_
                    ([/])([0-9][0-9][0][48]))|((29)([/])(02)([/])([0-9]_
                    [0-9][2468][048]))|((29)([/])(02)([/])([0-9][0-9]_
                    [13579][26])))$"
  esValidoFecha = expReg.Test(cadena)
  set expReg = nothing
end function

La expresión regular (que se puede poner en una única línea eliminando los _ finales) es un poco larga porque ha de tener en cuenta los días de los meses del año, los años bisiestos,… Para validar del lado del cliente (antes de enviar el formulario), se puede utilizar el mismo patrón en Javascript:

function esValidoFecha(cadena) {
  strExpReg = /^(((0[1-9]|[12][0-9]|3[01])([/])(0[13578]|10|12)([/])_
                (\d{4}))|(([0][1-9]|[12][0-9]|30)([/])(0[469]|11)_
                ([/])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([/])(02)([/])_
                (\d{4}))|((29)(\.|-|\/)(02)([/])([02468][048]00))|_
                ((29)([/])(02)([/])([13579][26]00))|((29)([/])(02)_
                ([/])([0-9][0-9][0][48]))|((29)([/])(02)([/])([0-9]_
                [0-9][2468][048]))|((29)([/])(02)([/])([0-9][0-9]_
                [13579][26])))$/;
  return strExpReg.test(cadena);
}

En esta función en Javascript sí que es necesario juntar la expresión en una única línea quitando los _ porque de lo contrario no funcionará.

Etiquetas: , , ,
10 Respuestas a “Validar fechas con expresiones regulares en ASP y Javascript”
  1. Victor dice:

    Muchas gracias, muy útil la verdad.

  2. edgardo dice:

    Realmente muy bueno lo de las expresiones regulares, recientemente necesité algo para asp y javascript y me has sido de gran ayuda

    saludos cordiales

    un colega

  3. admin dice:

    Gracias a vosotros por enriquecer también mi blog, es un placer para mí compartir la experiencia (poca) que tengo.

  4. yadier dice:

    quiero utilizar una de las expresiones que me estan facilitando ojalaaaaaaaa me sirva para lo que la quiero

  5. KiberPro dice:

    Esta validación presenta un problema, dado que algunas fechas “válidas” las muestra como inválidas. Ej. “26/02/2010”.

  6. admin dice:

    Gracias por comentar KiberPro, pero yo acabo de probar esa fecha y me la da como válida. Estoy utilizando esta función:
    function esValidoFecha(a) {
    strExpReg = /^(((0[1-9]|[12][0-9]|3[01])([/])(0[13578]|10|12)([/])(\d{4}))|(([0][1-9]|[12][0-9]|30)([/])(0[469]|11)([/])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([/])(02)([/])(\d{4}))|((29)(\.|-|\/)(02)([/])([02468][048]00))|((29)([/])(02)([/])([13579][26]00))|((29)([/])(02)([/])([0-9][0-9][0][48]))|((29)([/])(02)([/])([0-9][0-9][2468][048]))|((29)([/])(02)([/])([0-9][0-9][13579][26])))$/;
    return strExpReg.test(a);
    }

  7. StanLey dice:

    Muy buena esta expresion regular amigo, me ahorraste varias lineas de código, muchas gracias y espero que sigas aportando ideas como estas…

  8. franczorh dice:

    COMPROBAR EXPRESIONES REGULARES ON-LINE EN ESPAÑOL
    http://regexpre.orgfree.com/

  9. David dice:

    Hola amigo tu funcion soporta esto 31/02/1989 eso seria un error
    lo soportara?
    agradeceria tu ayuda

  10. Andy dice:

    Yo he modificado un poco la expresión regular de modo que permitan meterse días o meses con un solo dígito, quedando de la siguietne forma:
    expReg.Pattern = “^(” & _
    “(” & _
    “(0{0,1}[1-9]|[12][0-9]|3[01])([/])(0{0,1}[13578]|10|12)([/])(\d{4})” & _
    “)|(” & _
    “(0{0,1}[1-9]|[12][0-9]|30)([/])(0{0,1}[469]|11)([/])(\d{4})” & _
    “)|(” & _
    “(0{0,1}[1-9]|1[0-9]|2[0-8])([/])(0{0,1}2)([/])(\d{4})” & _
    “)|(” & _
    “(29)(\.|-|\/)(0{0,1}2)([/])([02468][048]00)” & _
    “)|(” & _
    “(29)([/])(0{0,1}2)([/])([13579][26]00)” & _
    “)|(” & _
    “(29)([/])(0{0,1}2)([/])([0-9][0-9][0][48])” & _
    “)|(” & _
    “(29)([/])(0{0,1}2)([/])([0-9][0-9][2468][048])” & _
    “)|(” & _
    “(29)([/])(0{0,1}2)([/])([0-9][0-9][13579][26])” & _
    “))$”

  11.  
Deja una Respuesta