正则表达式匹配⽇期,⽀持闰年,格式为YYYYMMDD
年份:[\d]{4}
带31的⽉份:(0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01]))
⾮2⽉不带31⽇的⽉份:((0[469])|11)((0[1-9])|([12][1-9])|30)
平年2⽉份 : 02((0[1-9])|(1[0-9])|(2[1-8]))
闰年2⽉份:02((0[1-9])|(1[0-9])|(2[1-9]))
闰年⽉份:
((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-9])))
平年⽉份:
((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-8])))
平年年份和⽉份,这个⽉份2⽉只有28号,如果出现0229这种⽇期就交给闰年带⽉份的正则表达式进⾏匹配,2个表达式⽤或连接
[\d]{4}(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-8]))))
闰年年份:
第⼀种:能被100整除,也能被400整除 0400 0800 1200 1600 2000 2400 2800 3200 3600 4000 4400 4800 5200 5600 6000 6400 6800 7200 7600 8000 8400 8800 9200 9600
(([02468][048])|([13579][26]))00
第⼆种:不能被100整除,但能被4整除 04 08 12
[0-9]{2}(([02468][048])|([13579][26]))
闰年年份和⽉份:
(((([02468][048])|([13579][26]))00)|([0-9]{2}(([02468][048])|([13579][26]))))(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])| ([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-9]))))
总表达式:
([\d]{4}(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-8])))))|(正则匹配日期年月日时分秒
(((([02468][048])| ([13579][26]))00)|([0-9]{2}(([02468][048])|([13579][26]))))(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))| (02((0[1-9])|(1[0-9])|(2[1-9])))))
⼀定要注意正则表达式连接起来的时候每个正则表达式都要在外层加个括号,这样就能保证连接起来的时候优先级不会改变,虽然这个整个表达式⼀眼看省去很难看,但是还是能达到验证的⽬的的,时间有限,就没去优化了,我估计还是有优化的空间的,我做这个,只是为了判断⼀个⽂件的⽂件名的名称是否合法,这个⽂件的名字中就带有⽇期,所以。。。。
原⽂:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论