日期正则表达式包括闰年的计算

分析:
中国式日期为“年-月-日”
年:1到任意在于1的整数,不能“0”开头。
月:1到12。
日:1、3、5、7、8、10、12月有31天;4、6、9、11月有30天,闰年2月份有29天,否则28天。
闰年的条件是符合下面二者之一:
(1)能被4整除,但不能被100整除。
(2)能被4整除,又能被400整除。//缩写为能被400整除。
#00格式(#代表任何数),只要#能被4整除,#00就一定能被400整除(闰年)。
非#00格式(也就不能被100整除了),能被4整除。
第一年的2月份都有28天,只要是闰年还要加一天。现在的任务是找出闰年。
100以内能被4整除的有:
00 04 08 12 16
20 24 28 32 36
40 44 48 52 56
60 64 68 72 76
80 84 88 92 96
他们的表达式为:(0?[048]|[2468][048]|[13579][26])

#00一定会被4整除,所以,只要#能被4整除,#00就一定能被400整除,他就是闰年。
#00格式闰年:(\d*(0?[048]|[2468][048]|[13579][26])00)
因为不能为#00格式,所以要从上面的表中删除00这个结果。
非#00格式闰年:(\d*(0?[48]|[2468][048]|[13579][26]))
把上面两个正则表达式合并
闰年:(\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))
整数01-28:(2[0-8]|[01]\d)
整数01-30:(30|[012]\d)
整数01-31:(3[01]|[012]\d)
整数1-28:(2[0-8]|1\d|[1-9])
整数1-30:(30|[12]\d|[1-9])
整数1-31:(3[01]|[12]\d|[1-9])
把上面两组格式合并在一起:
整数1-28:(2[0-8]|1\d|0?[1-9])
整数1-30:(30|[12]\d|0?[1-9])
整数1-31:(3[01]|[12]\d|0?[1-9])
现在我们把它们全部组合成中国“年-月-日”格式
^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))-0?2-29)$|^[1-9]\d*-((0?[13578]|10|12)-(3[01]|[12]\d|0?[1-9])|(0?[469]|11)-(30|[12]\d|0?[1-9])|(0?2)-(2[0-8]|1\d|0?[1-9]))$
匹配:
1-1-1
244-02-29
10-10-10
2000-2-29
2008-2-29
不匹配:
2009-2-29
2009-13-10
1005-12-65
中国“年/月/日”格式
^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))\/0?2\/29)$|^[1-9]\d*\/((0?[13578]|10|12)\/(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\/(30|[12]\d|0?[1-9])|(0?2)\/(2[0-8]|1\d|0?[1-9]))$
1/1/1
244/02/29
10/10/10
2000/2/29
2008/2/23
2009/2/29
2009/13/10
1005/12/65
中国“年.月.日”格式
^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))\.0?2\.29)$|^[1-9]\d*\.((0?[13578]|10|12)\.(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\.(30|[12]\d|0?[1-9])|(0?2)\.(2[0-8]|1\d|0?[1-9]))$
1.1.1
244.02.29
10.10.10
2000.2.29
2008.2.23
2009.2.29
2009.13.10
中国“年/月/日”、“年-月-日”、“年.月.日”格式
(^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))-0?2-29)$|^[1-9]\d*-((0?[13578]|10|12)-(3[01]|[12]\d|0?[1-9])|(0?[469]|11)-(30|[12]\d|0?[1-9])|(0?2)-(2[0-8]|1\d|0?[1-9]))$)|(^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))\/0?2\/29)$|^[1-9]\d*\/((0?[13578]|10|12)\/(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\/(30|[12]\d|0?[1-9])|(0?2)\/(2[0-8]|1\d|0?[1-9]))$)|(^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))\.0?2\.29)$|^[1-9]\d*\.((0?[13578]|10|12)\.(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\.(30|[12]\d|0?[1-9])|(0?2)\.(2[0-8]|1\d|0?[1-9]))$)
2008/2/29
2000-2-28
2008.2.29
1-1/1
中国“年月日”格式(用于身份证编码等),年由4位数表示,月2位,日2位
^(((0[048]|[2468][048]|[13579][26])00|\d\d(0[48]|[2468][048]|[13579][26]))0229)$|^\d{4}((0[13578]|10|12)(3[01]|[12]\d|0[1-9])|(0[469]|11)(30|[12]\d|0[1-9])|02(2[0-8]|1\d|0[1-9]))$
19880329
20001220
20080229
1988329
20090229
20091310
10051265
欧美“月/日/年”格式
^(0?2\/29\/(\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26])))$|^((0?[13578]|10|12)\/(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\/(30|[12]\d|0?[1-9])|(0?2)\/(2[0-8]|1\d|0?[1-9]))\/[1-9]\d*$
02/29/244
02/29/2000
2/29/2008
2/29/2009
13/10/2009

12/65/1005


转载自:http://dangjunli.iteye.com/blog/422985

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...