Validación de fecha con javascript y expresiones regulares

Varias funciones de validación de fecha con javascript y expresiones regulares.

Una probada pero no comprueba fecha válida (bisiestos y esas cosas)

function isDate(string)
{ //string estará en formato dd/mm/yyyy (dí­as < 31 y meses < 12)
  regExp=/^(([0-2]d|[3][0-1])/([0]d|[1][0-2])/[2][0]d{2})$
    |^(([0-2]d|[3][0-1])/([0]d|[1][0-2])/[2][0]d{2}s([0-1]d
    |[2][0-3]):[0-5]d:[0-5]d)$/;
  if(!regExp.test(string)) return false;
  else return true;
}

Una sin testear pero con muy buena pinta (¡que pedazo de expresión regular!)

function validateDate(fld)
{
  var RegExPattern =
    /^(?=d)(?:(?:(?:(?:(?:0?[13578]|1[02])(/|-|.)31)1
    |(?:(?:0?[1,3-9]|1[0-2])(/|-|.)(?:29|30)2))(?:(?:1[6-9]
    |[2-9]d)?d{2})|(?:0?2(/|-|.)293(?:(?:(?:1[6-9]
    |[2-9]d)?(?:0[48]|[2468][048]|[13579][26])
    |(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])
    |(?:1[0-2]))(/|-|.)(?:0?[1-9]|1d|2[0-8])4(?:(?:1[6-9]
    |[2-9]d)?d{2}))($| (?=d)))?(((0?[1-9]|1[012])
    (:[0-5]d){0,2}([AP]M))|([01]d|2[0-3])(:[0-5]d){1,2})?$/;
  var errorMessage = 'Por favor, introduzca una fecha válida
    (día, mes y año con 4 dígitos).
    Puede usar barra, punto o guión para separar los valores.
    La fecha debe ser real. 30-2-2000 no será aceptado.
    Formato mm/dd/yyyy.';
  if ((fld.value.match(RegExPattern)) && (fld.value!='')) {
    alert('Date is OK');
  }
  else {
    alert(errorMessage);
    fld.focus();
  }
}

Otra probada y que va fenomenal (sacada de aqui):

/* Devuelve si una cadena "dd/mm/yyyy" o
"dd-mm-yyyy" o "dd.mm.yyyy" es una fecha válida */
function esFecha (strValue)
{
  //check to see if its in a correct format
  var objRegExp = /^d{1,2}(-|/|.)d{1,2}1d{4}$/

  if(!objRegExp.test(strValue))
    return false; //doesn't match pattern, bad date
  else {
    var strSeparator = strValue.substring(2,3)
    //create a lookup for months not equal to Feb.
    var arrayDate = strValue.split(strSeparator);

    var arrayLookup = { '01' : 31,'03' : 31,
      '04' : 30,'05' : 31,
      '06' : 30,'07' : 31,
      '08' : 31,'09' : 30,
      '10' : 31,'11' : 30,'12' : 31
    }

    var intDay = parseInt(arrayDate[0],10);
    var intMonth = parseInt(arrayDate[1],10);
    var intYear = parseInt(arrayDate[2],10);
    //check if month value and day value agree

    if (arrayLookup[arrayDate[1]] != null) {
      if (intDay <= arrayLookup[arrayDate[1]] && intDay != 0
        && intYear > 1975 && intYear < 2050)
        return true;     //found in lookup table, good date
    }

    //check for February (bugfix 20050322)
    //bugfix for parseInt kevin
    //bugfix biss year  O.Jp Voutat

    if (intMonth == 2) {
      var intYear = parseInt(arrayDate[2]);

      if (intDay > 0 && intDay < 29) {
        return true;
      }
      else if (intDay == 29) {
        if ((intYear % 4 == 0) && (intYear % 100 != 0) ||
            (intYear % 400 == 0)) {
          // year div by 4 and ((not div by 100) or div by 400) ->ok
          return true;
        }
      }
    }
  }

  return false; //any other values, bad date
}

Otros artículos de esta serie:

[seriesposts show_date=0 order=asc]

Publicar un Comentario

Si es la primera vez que escribes, tu comentario será moderado por un administrador.

Con el fin de garantizar un ambiente de debate respetuoso, no se permitirán comentarios:

  • insultantes, difamatorios, racistas, sexistas, y/o discriminatorios
  • excesivamente críticos con otros participanes
  • que no aporten nada, sin sentido o repetidos
  • con enlaces considerados publicidad o spam
  • con material protegido por derechos de autor
*
*