【Javascript】日付チェック
Javascriptで日付チェック、こんな感じでしょうか。
とにかく判定ができればよいという方針で、大雑把に作ってます。
function validateDate(y, m, d)
{
y = y - 0
m = m - 1
d = d - 0
var dt = new Date(y, m, d)
return (dt.getFullYear() == y && dt.getMonth() == m && dt.getDate() == d)
}
お決まりの手段です。Dateオブジェクトを作って、そのDateオブジェクトから年月日をもらったとき、最初の年月日と一致するのが正しい年月日です。
時々、空欄をどう扱うか選びたいときがあるので、こういうことをすることもあります。
function validateDate(y, m, d, e)
{
//まったくの空欄をどう扱うか(空欄のとき第4引数=デフォルトはundefinedが返る)
if (y == "" && m == "" && d == "") {
return e
}
//以降、入力がある前提のチェック
y = y - 0; m = m - 1; d = d - 0;
var dt = new Date(y, m, d)
return (dt.getFullYear() == y && dt.getMonth() == m && dt.getDate() == d)
}
では、2009/9/9(正しい)や、2010-02-29(間違い)なども判断したいですがどうしましょう。
これはどう?
function validateDateStr(s)
{
var r = /^(\d+)[\/\-](\d+)[\/\-](\d+)$/
return validateDate(s.replace(r, "$1"), s.replace(r, "$2"), s.replace(r, "$3"))
}
正規表現で、文字列のお好みの部分を取り出せます。
String.substring()などでは後ろから3文字取得などやりづらいですが、これだととてもコンパクトです♪
phpは何かしらのフレームワークなどを利用することが多く、何度も同じ機能を書くことはあまりないですが、Javascriptは、古い既存システムを修正する際などに、ライブラリ類が何もないことなどよくあり、つい何度も書いてしまいます。
その繰り返しの中で、極限までコンパクト、かつ不具合なし、暗記できて何回でもかけるぐらいのコードにしてやろうと、書くたびに考えます。
プログラムなんて動けばいいものなので、無駄な労力ですが、個人的には、何度も何度も書くというのは好きです。