Vi una posible respuesta aquí, pero era para AAAA-MM-DD: Validación de fecha en JavaScript.
He modificado el código anterior para MM-DD-AAAA así, pero todavía no puedo conseguir que funcione:
String.prototype.isValidDate = function()
{
var IsoDateRe = new RegExp("^([0-9]{2})-([0-9]{2})-([0-9]{4})$");
var matches = IsoDateRe.exec(this);
if (!matches) return false;
var composedDate = new Date(matches[3], (matches[1] - 1), matches[2]);
return ((composedDate.getMonth() == (matches[1] - 1)) &&
(composedDate.getDate() == matches[2]) &&
(composedDate.getFullYear() == matches[3]));
}
¿Cómo puedo hacer que el código anterior funcione para MM-DD-AAAA y mejor aún para MM/DD/AAAA?
Gracias.
Utilizo esta expresión regular para validar MM-DD-AAAA:
function isValidDate(subject){
if (subject.match(/^(?:(0[1-9]|1[012])[\- \/.](0[1-9]|[12][0-9]|3[01])[\- \/.](19|20)[0-9]{2})$/)){
return true;
}else{
return false;
}
}
Sólo coincidirá con los meses válidos y puede utilizar / - o . como separadores.
¿Qué es lo que no funciona? He aquí una versión probada:
String.prototype.isValidDate = function() {
var match = this.match(/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/);
var test = new Date(match[3], match[1] - 1, match[2]);
return (
(test.getMonth() == match[1] - 1) &&
(test.getDate() == match[2]) &&
(test.getFullYear() == match[3])
);
}
var date = '12/08/1984'; // Date() is 'Sat Dec 08 1984 00:00:00 GMT-0800 (PST)'
alert(date.isValidDate() ); // true
Puedes simplificarlo un poco cambiando las dos primeras líneas de la función por esto:
var matches = this.match(/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/);
O, simplemente cambiar el parámetro para el constructor RegExp a ser
^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$