Editar: solución exacta a continuación
Podría hacer algo como esto, pero con un algoritmo más preciso para la validación del día:
function testDate(str) {
var t = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);
if(t === null)
return false;
var d = +t[1], m = +t[2], y = +t[3];
// Below should be a more acurate algorithm
if(m >= 1 && m <= 12 && d >= 1 && d <= 31) {
return true;
}
return false;
}
http://jsfiddle.net/aMWtj/
alg validación Fecha .: http://www.eee.hiflyers.co.uk/ProgPrac/DateValidation-algorithm.pdf
solución exacta: función que devuelve una fecha o nula analizado, dependiendo de sus necesidades exactamente.
function parseDate(str) {
var t = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);
if(t !== null){
var d = +t[1], m = +t[2], y = +t[3];
var date = new Date(y, m - 1, d);
if(date.getFullYear() === y && date.getMonth() === m - 1) {
return date;
}
}
return null;
}
http://jsfiddle.net/aMWtj/2/
En caso de que necesite la función para devolver verdadero/falso y para un formato aaaa/mm/dd
function IsValidDate(pText) {
var isValid = false ;
var t = pText.match(/^(\d{4})\/(\d{2})\/(\d{2})$/);
if (t !== null) {
var y = +t[1], m = +t[2], d = +t[3];
var date = new Date(y, m - 1, d);
isValid = (date.getFullYear() === y && date.getMonth() === m - 1) ;
}
return isValid ;
}
En general, es mejor que convierta cadenas en números con el [operador Unary plus] (https://developer.mozilla.org/en/JavaScript/Reference/Operators/Arithmetic_Operators#.2B_ (Unary_Plus)) en lugar de 'parseInt' . Es decir, 'd = + t [1]'. Evita problemas como que olvidó incluir la raíz en el cálculo del día (particularmente problemático cuando sabemos que el día puede tener ceros a la izquierda). – nnnnnn
hmm ... buen punto :) –