欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

常用日期格式正則表達式詳解(完善版)

 更新時間:2024年05月11日 11:38:33   作者:wangyanglongcc  
正則表達式是一種強大的字符串匹配工具,我們可以使用它來校驗日期格式是否合法,這篇文章主要給大家介紹了關(guān)于常用日期格式正則表達式詳解的相關(guān)資料,需要的朋友可以參考下

第一步,驗證年份

年份范圍為 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)文章

最新評論