常用日期格式正則表達(dá)式詳解(完善版)
第一步,驗(yàn)證年份
年份范圍為 0001 - 9999,匹配YYYY的正則表達(dá)式為:
[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}
第二步,驗(yàn)證月份和日期
1. 月份為[1, 3, 5, 7, 8, 10, 12],天數(shù)范圍為01-31
匹配MM__sep__DD的正則表達(dá)式為:
(0[13578]|1[02])__sep__(0[1-9]|[12][0-9]|3[01])
2. 月份為[4, 6, 9, 11],天數(shù)范圍為01-30
匹配MM__sep__DD的正則表達(dá)式為:
(0[469]|11)__sep__(0[1-9]|[12][0-9]|30)
3. 月份為2月
3.1 平年,2月為01-28
02__sep__(0[1-9]|[1][0-9]|2[0-8])
3.2 閏年,2月為01-29
由于上面已經(jīng)把2月01-28都包含了,所以這里只需要把2月29號(hào)匹配出來即可
1. 能被4整除,但不能被100整除
前兩位不需要考慮,后兩位能被4整除只有以下3種情況:
- ①十位為0,個(gè)位為[4,8]
- ②十位為[2,4,6,8],個(gè)位為[0,4,8]
- ③十位為[1,3,5,7,9],個(gè)位為[2,6]
則年份正則表達(dá)式為:
([0-9]{2})(0[48]|[2468][048]|[13579][26])
YYYY__sep__MM__sep__DD:
([0-9]{2})(0[48]|[2468][048]|[13579][26])__sep__02__sep__29
2. 能被400整除
首先,能被400整除,后兩位一定是00,則只需要保證前兩位能被4整除。
前兩位能被4整除只有以下3種情況:
- ①千位為0,百位為[4,8]
- ②千位為[2,4,6,8],百位為[0,4,8]
- ③千位為[1,3,5,7,9],百位為[2,6]
則年份正則表達(dá)式為:
(0[48]|[2468][048]|[13579][26])00
YYYY__sep__MM__sep__DD:
(0[48]|[2468][048]|[13579][26])00__sep__02__sep__29
結(jié)論:
- 平年
增加縮進(jìn),方便理解
([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})
__sep__
(
((0[13578]|1[02])__sep__(0[1-9]|[12][0-9]|3[01]))
|
((0[469]|11)__sep__(0[1-9]|[12][0-9]|30))
|
(02__sep__(0[1-9]|[1][0-9]|2[0-8]))
)
直接使用,方便復(fù)制替換
([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})__sep__(((0[13578]|1[02])__sep__(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)__sep__(0[1-9]|[12][0-9]|30))|(02__sep__(0[1-9]|[1][0-9]|2[0-8])))

- 閏年
增加縮進(jìn),方便理解
(([0-9]{2})(0[48]|[2468][048]|[13579][26])__sep__02__sep__29)
|
((0[48]|[2468][048]|[13579][26])00__sep__02__sep__29)
直接使用,方便復(fù)制替換
(([0-9]{2})(0[48]|[2468][048]|[13579][26])__sep__02__sep__29)|((0[48]|[2468][048]|[13579][26])00__sep__02__sep__29)

- 平年和閏年合并
根據(jù)上述1和2,可以得出一個(gè)匹配合法日期的正則表達(dá)式(不區(qū)分平年和閏年)
增加縮進(jìn),方便理解
(([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})
__sep__
(
((0[13578]|1[02])__sep__(0[1-9]|[12][0-9]|3[01]))
|
((0[469]|11)__sep__(0[1-9]|[12][0-9]|30))
|
(02__sep__(0[1-9]|[1][0-9]|2[0-8]))
))
|
((([0-9]{2})(0[48]|[2468][048]|[13579][26])__sep__02__sep__29)
|
((0[48]|[2468][048]|[13579][26])00__sep__02__sep__29))
直接使用,方便復(fù)制替換
(([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})__sep__(((0[13578]|1[02])__sep__(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)__sep__(0[1-9]|[12][0-9]|30))|(02__sep__(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])__sep__02__sep__29)|((0[48]|[2468][048]|[13579][26])00__sep__02__sep__29))

附:日期計(jì)算
JS的正則表達(dá)式還可以用來進(jìn)行日期計(jì)算。下面是一個(gè)計(jì)算兩個(gè)日期之間相差天數(shù)的例子:
function dateDiff(startDate, endDate){ let start = new Date(startDate); let end = new Date(endDate); let diff = end.getTime()- start.getTime(); return Math.floor(diff /(24 * 3600 * 1000));}console.log(dateDiff('2023-04-01','2023-05-01'));//輸出30總結(jié)
到此這篇關(guān)于常用日期格式正則表達(dá)式的文章就介紹到這了,更多相關(guān)日期格式正則表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
UNIX/LINUX SHELL 正則表達(dá)式語(yǔ)法詳解附使用方法
一個(gè)正則表達(dá)式就是由普通字符(例如字符 a 到 z)以及特殊字符(稱為元字符)組成的文字模式。該模式描述在查找文字主體時(shí)待匹配的一個(gè)或多個(gè)字符串。正則表達(dá)式作為一個(gè)模板,將某個(gè)字符模式與所搜索的字符串進(jìn)行匹配2019-11-11
JavaScript中的正則表達(dá)式使用及驗(yàn)證qq號(hào)碼的正則
這篇文章給大家介紹了javascript中的正則表達(dá)式使用及驗(yàn)證qq號(hào)碼的正則表達(dá)式,涉及到手機(jī)號(hào)、姓名、qq相關(guān)知識(shí)驗(yàn)證,感興趣的朋友一起學(xué)習(xí)吧2015-11-11
SQL正則表達(dá)式錯(cuò)誤 “parentheses not balanced“ 問題
在實(shí)際開發(fā)中,數(shù)據(jù)庫(kù)查詢經(jīng)常需要使用正則表達(dá)式(REGEXP)來篩選復(fù)雜條件下的數(shù)據(jù),然而,一些開發(fā)者在操作中可能會(huì)遇到類似以下錯(cuò)誤parentheses not balanced,所以本文給大家介紹了SQL正則表達(dá)式錯(cuò)誤 “parentheses not balanced“ 問題的排查和解決方案2024-12-12
表單驗(yàn)證常用正則(強(qiáng)烈推薦大家收藏下)
表單驗(yàn)證常用正則,非常不錯(cuò),收集的相對(duì)比較完整,大家可以看看。2009-11-11
正則表達(dá)式(regex)或操作符”|“使用易出現(xiàn)功能Bug
這篇文章主要介紹了正則表達(dá)式(regex)或操作符”|“使用易出現(xiàn)功能Bug,需要的朋友可以參考下2015-10-10

