1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
/**
Cette fonction valide une date à partir des valeurs d'une date :
dateValidate(2012, 2, 30) => false;
dateValidate(2011, 11, 24) => true;
*/
function dateValidate(y, m, d) {
d=new Date(y, m-1, d);
return d.getMonth() == m-1 && d.getFullYear()==y;
};
/**
Cette fonction valide une chaine de caractère
et dit si c'est une date valide ou non,
on part du principe que la date est au
format YYYY/MM/DD (le caractère de séparation des chiffres étant optionnel.
dateValidateStr("2012/12/25"); => true;
dateValidateStr("2012/2/31"); => false;
Fonction peut vraiment utile. on peut la jeter au profit de la suivante
*/
function dateValidateStr(str) {
var v = str.split(/\D+/);
return dateValidate.apply(this,v);
}
/**
Cette fonction valide une date en fonction du mask
Elle reutilise la fonction dateValidate.
dateValidateFromMask("2012/31/12","YYYY/DD/MM"); => true;
dateValidateFromMask("2012/31/12","YYYY/MM/DD"); => false;
dateValidateFromMask("03/25/1998","MM/DD/YYYY"); => true;
dateValidateFromMask("03/25/1998","mm/dd/yyyy"); => true;
*/
function dateValidateFromMask(str, mask) {
//Valide la date pour savoir si elle respecte le mask
if(!new RegExp(mask.replace(/[ymd]/gi,'\\d').replace(/\//g,'\\/')).test(str)) return false;
// valide la date au niveau des valeurs y/m/d
var dateArr = str.split(/\D+/),
values = {};
// créé un objet qui associera les y/m/d du mask avec la date pour ensuite les reutiliser la fonction dateValidate.
// si str = "2012/23/05" et mask = "YYYY/DD/MM";
// values = {y:"2012", m:"05", d:"23"};
mask.match(/([ymd]+)/gi).forEach(function(str,i) {
values[str.charAt(0).toLowerCase()] = dateArr[i];
});
return dateValidate(values.y, values.m, values.d);
} |
Partager