B-Teck!

お仕事からゲームまで幅広く

【JavaScript】日付の妥当性をチェックする

正規表現でチェックして欲しい形式以外をふるいにかけた後、
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