正則表達式校驗YYYYMMDD日期格式
首先,我們先了解2個概念:
1、合法的日期範圍:
DateTime 值類型表示值範圍在公元(基督紀元)0001 年 1 月 1 日午夜 12:00:00 到公元 (C.E.) 9999 年 12 月 31 日晚上 11:59:59 之間的日期和時間。
2、平年和閏年
地球繞太陽公轉一週叫做一回歸年,一回歸年長365日5時48分 46秒。因此,公曆規定有平年和閏年,平年一年有365日,比迴歸年短0.2422日,四年共短0.9688日,故每四年增加一日,這一年有366日,就 是閏年。但四年增加一日比四個迴歸年又多0.0312日,400年後將多3.12日,故在400年中少設3個閏年,也就是在400年中只設97個閏年,這樣公曆年的平均長度與迴歸年就相近似了。由此規定:年份是整百數的必須是400的倍數纔是閏年,例如1900年、2100年就不是閏年。
驗證YYYY年份:
\d{3}[1-9]|\d{2}[1-9]\d|\d[1-9]\d{2}|[1-9]\d{3}
驗證MMDD月日:
大月(1、3、5、7、8、10、12月,有31天)
(0[13578]|1[02])(0[1-9]|[12]\d|3[01])
小月(4、6、9、11月,有30天)
(0[469]|11)(0[1-9]|[12]\d|30)
平年2月(有28天)
02(0[1-9]|[1]\d|2[0-8])
閏年:
能被4整除但不能被100整除的年份
(\d{2})(0[48]|[2468][048]|[13579][26])
能被400整除的年份
((0[48]|[2468][048]|[3579][26])00)
閏年2月(有29天)
((\d{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229
最終,驗證YYYYMMDD的正則表達式爲
((\d{3}[1-9]|\d{2}[1-9]\d|\d[1-9]\d{2}|[1-9]\d{3})(((0[13578]|1[02])(0[1-9]|[12]\d|3[01]))|((0[469]|11)(0[1-9]|[12]\d|30))|(02(0[1-9]|[1]\d|2[0-8]))))|(((\d{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229)