常用日期格式正則表達式詳解(完善版)
第一步,驗證年份
年份范圍為 0001 - 9999,匹配YYYY的正則表達式為:
[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}
第二步,驗證月份和日期
1. 月份為[1, 3, 5, 7, 8, 10, 12],天數(shù)范圍為01-31
匹配MM__sep__DD的正則表達式為:
(0[13578]|1[02])__sep__(0[1-9]|[12][0-9]|3[01])
2. 月份為[4, 6, 9, 11],天數(shù)范圍為01-30
匹配MM__sep__DD的正則表達式為:
(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號匹配出來即可
1. 能被4整除,但不能被100整除
前兩位不需要考慮,后兩位能被4整除只有以下3種情況:
- ①十位為0,個位為[4,8]
- ②十位為[2,4,6,8],個位為[0,4,8]
- ③十位為[1,3,5,7,9],個位為[2,6]
則年份正則表達式為:
([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]
則年份正則表達式為:
(0[48]|[2468][048]|[13579][26])00
YYYY__sep__MM__sep__DD:
(0[48]|[2468][048]|[13579][26])00__sep__02__sep__29
結(jié)論:
- 平年
增加縮進,方便理解
([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])))
- 閏年
增加縮進,方便理解
(([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,可以得出一個匹配合法日期的正則表達式(不區(qū)分平年和閏年)
增加縮進,方便理解
(([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))
附:日期計算
JS的正則表達式還可以用來進行日期計算。下面是一個計算兩個日期之間相差天數(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)于常用日期格式正則表達式的文章就介紹到這了,更多相關(guān)日期格式正則表達式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
UNIX/LINUX SHELL 正則表達式語法詳解附使用方法
一個正則表達式就是由普通字符(例如字符 a 到 z)以及特殊字符(稱為元字符)組成的文字模式。該模式描述在查找文字主體時待匹配的一個或多個字符串。正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配2019-11-11SQL正則表達式錯誤 “parentheses not balanced“ 問題
在實際開發(fā)中,數(shù)據(jù)庫查詢經(jīng)常需要使用正則表達式(REGEXP)來篩選復(fù)雜條件下的數(shù)據(jù),然而,一些開發(fā)者在操作中可能會遇到類似以下錯誤parentheses not balanced,所以本文給大家介紹了SQL正則表達式錯誤 “parentheses not balanced“ 問題的排查和解決方案2024-12-12正則表達式(regex)或操作符”|“使用易出現(xiàn)功能Bug
這篇文章主要介紹了正則表達式(regex)或操作符”|“使用易出現(xiàn)功能Bug,需要的朋友可以參考下2015-10-10