這裏的檢查日期字符串的有效性的功能,考慮格式也:
function chkdate(datestr,formatstr){
if (!(datestr && formatstr)) {return false;}
var splitter = formatstr.match(/\-|\/|\s/) || ['-']
,df = formatstr.split(splitter[0])
,ds = datestr.split(splitter[0])
,ymd =[0,0,0]
,dat;
for (var i=0;i<df.length;i++){
if (/yyyy/i.test(df[i])) {ymd[0] = ds[i];}
else if (/mm/i.test(df[i])) {ymd[1] = ds[i];}
else if (/dd/i.test(df[i])) {ymd[2] = ds[i];}
}
dat = new Date(ymd.join('/'));
return !isNaN(dat) && Number(ymd[1])<=12 && dat.getDate()===Number(ymd[2]);
}
//usage (in your case)
var months = {january:1,february:2,march:3,april:4,may:5,
june:6,july:7,august:8,september:9,october:10,
november:11,december:12},
inputdateraw = 'february 29 2011'.split(' '),
inputdate = [months[inputdateraw[0]],
inputdateraw[1],
inputdateraw[2]].join(' ');
console.log(chkdate (inputdate, 'mm dd yyyy')); //=> false
參見this SO-question
接觸到的第一個問題是:爲什麼你需要正則表達式?沒有可以驗證日期的類嗎?不要重新發明輪子。順便說一句,你的正則表達式將接受4月00 6787.你真的想用正則表達式來驗證,如果2月29日,那麼'year%4 == 0 &&(year%100!= 0 || year%400 == 0)'? – Benoit 2012-03-02 10:54:34
你使用jQuery日期選擇器嗎? – 2012-03-02 10:59:17