正規表現でチェックして欲しい形式以外をふるいにかけた後、
Date型に突っ込んで突っ込む前と同じ年月日かを確認する。
これで欲しい形式以外は入ってこないし、変な日付が入ってきて無理やり変換されても
変換前との比較で判定できる。
別の形式も許容する場合は、isNaN()
とか入れる必要があると思う。
function isDate(strDate){ // 空文字は無視 if(strDate == ""){ return true; } // 年/月/日の形式のみ許容する if(!strDate.match(/^\d{4}\/\d{1,2}\/\d{1,2}$/)){ return false; } // 日付変換された日付が入力値と同じ事を確認 // new Date()の引数に不正な日付が入力された場合、相当する日付に変換されてしまうため // var date = new Date(strDate); if(date.getFullYear() != strDate.split("/")[0] || date.getMonth() != strDate.split("/")[1] - 1 || date.getDate() != strDate.split("/")[2] ){ return false; } return true; } console.log(isDate("")); //true 空文字は許容 console.log(isDate("2016/01/01")); //true console.log(isDate("2017/02/28")); //true console.log(isDate("2017/2/02")); //true console.log(isDate("2017/12/2")); //true console.log(isDate("20160101")); //false console.log(isDate("2016-01-01")); //false console.log(isDate("2016/01/01/")); //false console.log(isDate("2017/02/29")); //false console.log(isDate("2017/22/29")); //false