今天写的一个正则式:匹配日期并考虑闰年和2月份在内等情况

本文介绍了一种复杂的正则表达式方案,用于验证日期格式并判断是否为闰年。重点在于如何通过正则表达式精确地匹配闰年中的2月29日,并排除非闰年中的相同日期。

计算闰年在内的月份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])))

文法真的是有点复杂了,比如有共性的地方没有放到一起,这个以后有时间再看看了 :),多谢指点。

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值