2011-12-17 43 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