【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は、古い既存システムを修正する際などに、ライブラリ類が何もないことなどよくあり、つい何度も書いてしまいます。
その繰り返しの中で、極限までコンパクト、かつ不具合なし、暗記できて何回でもかけるぐらいのコードにしてやろうと、書くたびに考えます。
プログラムなんて動けばいいものなので、無駄な労力ですが、個人的には、何度も何度も書くというのは好きです。
コメント