JavaScriptで入力値が日付(yyyy/mm/dd)の形をしているかどうか、さらに存在する日付かどうかのチェックを行うサンプルです。
Program
function check_date(s) { if (typeof s == "string") { var a = s.match(/^(\d+)\/(\d+)\/(\d+)$/); if (a) { var y = parseInt(a[1]); var m = parseInt(a[2]) - 1; var d = parseInt(a[3]); var x = new Date(y, m, d); return (y == x.getFullYear() && m == x.getMonth() && d == x.getDate()); } } return false; }
check_date('123'); // → false check_date('123/4/5'); // → true check_date('2018/02/02'); // → true check_date('2018/02/32'); // → false check_date('2018/02/29'); // → false check_date('2020/02/29'); // → true check_date('2019/9/9'); // → true check_date('16000/12/31'); // → true
Demo
結果:
Memo
区切り文字を / から – に変更する場合は、正規表現を変更してください。
/^(\d+)-(\d+)-(\d+)$/
以下のようにすると、年月日の表現を「4桁-2桁-2桁」に制限できます。
/^(\d\d\d\d)-(\d\d)-(\d\d)$/