2011-12-17 78 views
0

我發現這個來驗證DD/MM/YYYY日期:正則表達式:表達式匹配的有效日期,但有最小和最大日期

^(((((0[1-9])|(1\d)|(2[0-8]))\/((0[1-9])|(1[0-2])))|((31\/((0[13578])|(1[02])))|((29|30)\/((0[1,3-9])|(1[0-2])))))\/((20[0-9][0-9])|(19[0-9][0-9])))|((29\/02\/(19|20)(([02468][048])|([13579][26]))))$ 

如何設置最小/最大日期?

+0

爲什麼不把兩者分開? – 2011-12-17 15:04:12

+0

你在用什麼語言?數字比較是RegEx最好的選擇。 – FakeRainBrigand 2011-12-17 15:07:43

+0

@FakeRainBrigand我正在使用javascript(maskedinput.js)[點擊此處查看頁面](http://digitalbush.com/projects/masked-input-plugin/) – Steve 2011-12-17 15:09:07

回答

1

程序設計語言(如javaC#python等)具有date/time/datetime類型。
date可以通過構造函數創建,如果您提供有效的參數。
如果不是,它將產品exception可以捕獲(通常try...catch聲明)。
使用regex很難驗證29/2/201229/2/2013
但在date語言類型的幫助下很容易。

$ python 
>>> import time 
>>> time.strptime('29/2/2012', '%d/%m/%Y') 
time.struct_time(tm_year=2012, tm_mon=2, tm_mday=29, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=60, tm_isdst=-1) 
>>> time.strptime('29/2/2013', '%d/%m/%Y') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python3.2/_strptime.py", line 482, in _strptime_time 
    tt = _strptime(data_string, format)[0] 
    File "/usr/lib/python3.2/_strptime.py", line 459, in _strptime 
    datetime_date(year, 1, 1).toordinal() + 1 
ValueError: day is out of range for month 
0

如果您使用該插件,至少您知道您將從格式化角度擁有有效的日期。然後解析日期並確定所有規則是JavaScript的工作。

function是不是完成,所以如果有人添加到它:按更新按鈕,並放下鏈接在這裏。如果更完整,我會更新這篇文章。

我無法想象在RegEx中真正驗證日期。

0

對於比較日期,您也可以使用date.js

HTH