首頁 > 軟體

一文教會你用正規表示式校驗日期時間格式

2022-10-14 14:01:48

日期部分校驗

概念

首先,我們先了解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

最終,驗證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)

校驗yyyy-MM-dd

精確到日即可,即年月日,格式:yyyy-MM-dd,例如:2016-12-13

((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))

時間部分校驗

校驗HHmmss

校驗時分秒:格式:HHmmss

([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])

校驗HH-mm-ss

校驗時分秒:格式:HH-mm-ss

([0-1]?[0-9]|2[0-3])-([0-5][0-9])-([0-5][0-9])

校驗日期+時間部分

校驗yyyyMMddHHmmss

((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229))([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])

校驗 yyyy-MM-dd HH:mm:ss

校驗 yyyy-MM-dd HH:mm:ss(日期和時間之間有一個或多個空格)

((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])

應用舉例

衛生資料元校驗

                     case "D8":
                        if(!value_str.matches("((\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)")){
                            valid = false;
                            tipInfo = "不符合日期格式yyyyMMdd";
                            break;
                        }
                        break;
                    case "T6":
                        if(!value_str.matches("([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])")){
                            valid = false;
                            tipInfo = "不符合時間格式HHmmss";
                            break;
                        }
                        break;
                    case "DT15":
                        if(!value_str.matches("(((\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))(T)(([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9]))")){
                            valid = false;
                            tipInfo = "不符合日期時間格式yyyyMMddTHHmmss";
                            break;
                        }
                        break;

參考文章:

https://www.cnblogs.com/Alisa68/p/13208704.html

https://www.cnblogs.com/yyy-blog/p/10593983.html

總結

到此這篇關於正規表示式校驗日期時間格式的文章就介紹到這了,更多相關正規表示式校驗日期時間格式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com