日期:2014-05-20  浏览次数:20381 次

求一日期的正则表达式
如:如果输入2007-1-9   或者   2007-01-09   或者   yyyy-mm-dd这三种格式都可以.
这样的功能,能不能用一个正则表达式来实现.

------解决方案--------------------
YYYY-MM-DD

^(?:(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(-)(?:0?2\1(?:29))$)|(?:(?:1[6-9]|[2-9]\d)?\d{2})(-)(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[1,3-9]|1[0-2])\2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1\d|2[0-8]))$
------解决方案--------------------
http://topic.csdn.net/t/20060222/16/4571000.html
符合
------解决方案--------------------
^\d{4}\-(([1-9])|((0[1-9])|(1[0-2])))\-(([1-9])|(([0[1-9])|(3[0-1])|([1-2]\d)))$

没有判断2月28,29。
------解决方案--------------------
^(((1[6-9]|[2-9]\d)(([02468][048])|([13579][26]))(-)?((((0?[13578])|(1[02]))(-)?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))(-)?((0?[1-9])|([1-2][0-9])|(30)))|(0?2(-)?((0?[1-9])|([1-2][0-9])))))|((1[6-9]|[2-9]\d)(([02468][1235679])|([13579][01345789]))(-)?((((0?[13578])|(1[02]))(-)?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))(-)?((0?[1-9])|([1-2][0-9])|(30)))|(0?2(-)?((0?[1-9])|(1[0-9])|(2[0-8]))))))$

用这个试下,测试满足你的要求,并带闰年判断,年份为1600-9999,如对年份或是连接符“-”有要求,稍加改进即可