史上最詳細的js日期正規表示式分享

2022-10-08 13:24:14 字數 2809 閱讀 3697

最簡單的正則 如 : /d-/d-/d

但是實際情況卻不是那麼簡單,,要考慮,有效性和閏年等問題.....

對於日期的有效範圍,不同的應用場景會有所不同。msdn中定義的datetime物件的有效範圍是:0001-01-01 00:00:00到9999-12-31 23:59:59。

unix時間戳的0按照iso 8601規範為 :1970-01-01t00:00:00z。

先考慮與年份無關的前三條規則,年份可統一寫作

(?!0000)[0-9]

下面僅考慮月和日的正則

1. 包括平年在內的所有年份的月份都包含1-28日

(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])

2. 包括平年在內的所有年份除2月外都包含29和30日

(0[13-9]|1[0-2])-(29|30)

3. 包括平年在內的所有年份1、3、5、7、8、10、12月都包含31日

(0[13578]|1[02])-31)

合起來就是除閏年的2月29日外的其它所有日期

(?!0000)[0-9]-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)

接下來考慮閏年的實現

1 : 四年一閏

([0-9](0[48]|[2468][048]|[13579][26])

2 : 百年不閏,四百年再閏

(0[48]|[2468][048]|[13579][26])00

3 : 合起來就是所有閏年的2月29日

([0-9](0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)

四條規則都已實現,且互相間沒有影響,合起來就是所有符合datetime範圍的日期的正則

^((?!0000)[0-9]-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)|([0-9](0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29

考慮到這個正規表示式僅僅是用作驗證,所以捕獲組沒有意義,只會占用資源,影響匹配效率,所以可以使用非捕獲組來進行優化。

^(?:(?!0000)[0-9]-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9](?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$

分類: j**ascript

js 日期正規表示式支援月日驗證

這款js 日期正規表示式支援月日驗證,我們會一一舉例說明一下有關日期驗證表示式的函式例項了.

function isdate(str))(-|/)(d)2(d)$/);

if(result==null) return false;

var d=new date(result[1], result[3]-1, result[4]);

return (d.getfullyear()==result[1] && d.getmonth()+1==result[3] && d.g程式設計客棧etdate()==result[4]);

}檢查是否為 yyyy-mm-dd || yyyy/mm/dd 的日期格式

麵僅考慮月和日的正則

1. 包括平年在內的所有年份的月份都包含1-28日

(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])

2. 包括平年在內的所有年份除2月外都包含29和30日

(0[13-9]|1[0-2])-(29|30)

3. 包括平年在內的所有年份1、3、5、7、8、10、12月都包含31日

(0[13578]|1[02])-31)

合起來就是除閏年的2月29日外的其它所有日期

(?!0000)[0-9]-((0[1-9]|1[0-2])-(0www.cppcns.com[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)

function isdatetime(str)

)(-|/)(d)2(d) (d):(d):(d)$/);

if(result==null) return false;

var d= new date(result[1], result[3]-1, result[4], result[5], result[6], result[7]);

return (d.getfullyear()==result[1]&&(d.getmonth()+1)==result[3]&&d.getdate()==result[4]&&d.gethours()==result[5]&&d.getminutes()==result[6]&&d.getseconds()==result[7]);

}// 判斷輸入是否是有效的長日期格式 - "yyyy-mm- hh:mm:ss" || "yyyy/mm/dd hh:mm:ss"

這是yyyy-mm-dd hh:mm:ss 的

/^(d)-(d)-(d) (d):(d):(d)$/ ;

這是 yyyy-mm-ddde 的

/^(d)-(d)-(d)$/

本文標題: 史上最詳細的js日期正規表示式分享

本文位址:

正規表示式(全網最全 最詳細)

一 校驗數字的表示式 數字 0 9 n位的數字 d 至少n位的數字 d m n位的數字 d 零和非零開頭的數字 0 1 9 0 9 非零開頭的最多帶兩位小數的數字 1 9 0 9 0 9 帶1 2位小數的正數或負數 d d 正數 負數 和小數 d d 有兩位小數的正實數 0 9 0 9 有1 3位小...

史上最全正規表示式

很多不太懂正則的朋友,在遇到需要用正則校驗資料時,往往是在網上去找很久,結果找來的還是不很符合要求。所以我最近把開發中常用的一些正規表示式整理了一下,在這裡分享一下。給自己留個底,也給朋友們做個參考。1.數字 0 9 2.n位的數字 d 3.至少n位的數字 d 4.m n位的數字 d 5.零和非零開...

史上最全的正規表示式

正規表示式的使用 不管是前端還是後台都要接觸正規表示式,不過自己寫正規表示式感覺是非常的繁瑣,也會經常出錯誤,讓我們頭痛不已,那麼讓我們從最基礎的了解一下正規表示式。一 什麼是正規表示式 在編寫處理字串的程式或網頁時,經常會有查詢符合某些複雜規則的字串的需要。正規表示式就是用於描述這些規則的工具。換...