次のような正規表現を使用して、日付が構文的に正しいかどうかを確認できます。
/^(\d{1,2})([-\.\/])(\d{1,2})\2(\d{4})$/
^
文字列の先頭と$
末尾にそれぞれ一致します
\d{1,2}
1桁または2桁に一致
\d{4}
正確に 4 桁に一致
\2
2 番目のキャプチャ グループ ( - . /
)でキャプチャされた文字列に一致します。
一致した場合、一致した日付、月、年を使用して新しい日付を作成し、結果の日付、月、年を一致した値と比較できます。これを行う関数を次に示します。
function checkDate(dateText) {
var match = dateText.match(/^(\d{1,2})([-\.\/])(\d{1,2})\2(\d{4})$/);
// "31.04.2012" -> ["31.04.2012", "31", ".", "04", "2012"]
if (match === null) {
return false;
}
var date = new Date(+match[4], +match[3] - 1, +match[1]);
return date.getFullYear() == +match[4] &&
date.getMonth() == +match[3] - 1 &&
date.getDate() == +match[1];
}
checkDate("30.04.2013"); // true
checkDate("31-04-2013"); // false (April has 30 days)
+
文字列を数値に変換するために使用されます(+"01"
になります1
)
- 月は 0 ベース (0 = 1 月、1 = 2 月、...)
- 上記の例では、日付が
dd-mm-yyyy
フォーマットされていることを前提としています
Dateオブジェクトは、無効な日付を修正しようとします。31-4-2013
yieldsなどの日付を作成しようとすると1-05-2013
、上記の関数は結果の日付を入力パラメーターと比較して有効性を確認します。