2011-02-05 7 views
2

私はregexが不思議に思えますが、月や日に先行する0を強制し、1桁で月や日がある日付を受け入れる必要がありますフォーマット正規表現でこの形式の日付を確認する

+1

タイムスタンプオブジェクトに解析し、あなたがそれを解析することができない場合は?途中で余分な正規表現のステップは必要ありません。 – Ether

答えて

3

は、私は正規表現テスターでこれをテストした:

^(((0?[1-9]|[12]\d|3[01])\/(0?[13578]|1[02])\/((1[6-9]|[2-9]\d)\d{2}))|((0?[1-9]|[12]\d|30)\/(0?[13456789]|1[012])\/((1[6-9]|[2-9]\d)\d{2}))|((0?[1-9]|1\d|2[0-8])\/0?2\/((1[6-9]|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0?[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$ 

これは、リンクされた同じの@ ant18ですが、私はすべての主要な0ため?を追加しました。

EDIT: SRYはアスカーの名前を読み違え、オプションの先頭の0を使用して提供する正規表現と同じ

+0

2月2日にまだ死ぬ...何かが欠けている。 – aorcsik

+0

それを残して、1を残しました0: – aorcsik

+0

うるう年には機能しません2/29/2016 – brad

1

^(((0?[1-9]|[12]\d|3[01])\/(0?[13578]|1[02])\/((1[6-9]|[2-9]\d)\d{2}))|((0?[1-9]|[12]\d|30)\/(0?[13456789]|1[012])\/((1[6-9]|[2-9]\d)\d{2}))|((0?[1-9]|1\d|2[0-8])\/0?2\/((1[6-9]|[2-9]\d)\d{2}))|(29\/0?2\/((1[6-9]|[2-9]\d)(0?[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$

を修正しました。

+0

うるう年には機能しません2012/02/29 – brad

0

これはそれを行います。

var rx = /^(3[0-1]|[0-2]?[0-9])\/(1[0-2]|0?[0-9])\/[0-9]{4}$/; 

    rx.text('01/01/2000'); //true 

    rx.text('1/1/2000'); //true 

    rx.text('32/1/2000'); //false 

    rx.text('1/13/2000'); //false 

しかし、これは実際にそれが31/2/2000

のような日付は、日付を解析することができますので、有効な日付を確認し、それが上の分割検証しません。 /を使用してnew Dateを使用して値から日付オブジェクトを作成し、同じ値を抽出し、日付が無効でない場合は一致するかどうかを確認してください:)

関連する問題