计算闰年在内的月份2-29
第一个条件:能被400整除
((?<tt>(?:[3578]|[1][02]?)-(?:[1-2]?[0-9]?|[3][0-1]?)|(?:[469]|[1]{2})-(?:[1-2]?[0-9]?|[3][0]?)|[2]-[1-2]?[0-8]?)-/d+)|((?<ff>(?:[3578]|[1][02]?)-(?:[1-2]?[0-9]?|[3][0-1]?)|(?:[469]|[1]{2})-(?:[1-2]?[0-9]?|[3][0]?)|[2]-[1-2]?[0-9]?)-(?:[13579][26]|[2468][048])[0]{2})
第二个条件:能被4整除,但不能被100整除
((?<T1>[0]?(?:[3578]|[1][02]?)-(?:[1-2]?[0-9]|[3][0-1]?)|[0]?(?:[469]|[1]{2})-[0]?(?:[1-2]?[0-9]|[3][0]?)|[0]?[2]-[0]?[1-2]?[0-8]?)-/d{4})|((?<T2>[0]?(?:[3578]|[1][02]?)-[0]?(?:[1-2]?[0-9]?|[3][0-1]?)|(?:[469]|[1]{2})-[0]?(?:[1-2]?[0-9]?|[3][0]?)|[0]?[2]-[0]?[1-2]?[0-9]?)-((?:[13579][26]|[2468][048])[0]{2}|/d{2}(?:[13579][26]|[2468][048]|[02468][48])))
(?:[13579][26]|[2468][048])[0]{2}|/d{2}(?:[13579][26]|[2468][048]|[02468][48])
前面是处理被400整除,后面是处理能被4整除,但不能被100整除,这些情况只对2月份进行操作的。而对其他非闰年的2月份则较为简单。
测试结果:
11-25-2006
11-32-2003不匹配
02-25-2006
02-05-2006
2-29-2004
2-29-2000
02-29-2000
2-29-2003 不匹配
2-29-2600 不匹配
分模块完成,寻找共性!
完整:
((?<T1>[0]?(?:[3578]|[1][02]?)-(?:[1-2]?[0-9]|[3][0-1]?)|[0]?(?:[469]|[1]{2})-[0]?(?:[1-2]?[0-9]|[3][0]?)|[0]?[2]-[0]?[1-2]?[0-8]?)-/d{4})|((?<T2>[0]?(?:[3578]|[1][02]?)-[0]?(?:[1-2]?[0-9]?|[3][0-1]?)|(?:[469]|[1]{2})-[0]?(?:[1-2]?[0-9]?|[3][0]?)|[0]?[2]-[0]?[1-2]?[0-9]?)-((?:[13579][26]|[2468][048])[0]{2}|/d{2}(?:[13579][26]|[2468][048]|[02468][48])))
文法真的是有点复杂了,比如有共性的地方没有放到一起,这个以后有时间再看看了 :),多谢指点。
本文介绍了一种复杂的正则表达式方案,用于验证日期格式并判断是否为闰年。重点在于如何通过正则表达式精确地匹配闰年中的2月29日,并排除非闰年中的相同日期。
1390





