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