史上最詳細的js日期正則表達式分享

最簡單的正則 如 : /d{4}-/d{2}-/d{2}
但是實際情況卻不是那么簡單,,要考慮,有效性和閏年等問題.....

對于日期的有效范圍,不同的應用場景會有所不同。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]{4}

下面僅考慮月和日的正則

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]{4}-((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]{2}(0[48]|[2468][048]|[13579][26])

2 : 百年不閏,四百年再閏
(0[48]|[2468][048]|[13579][26])00

3 : 合起來就是所有閏年的2月29日
([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)

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

^((?!0000)[0-9]{4}-((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]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)$

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

^(?:(?!0000)[0-9]{4}-(?:(?: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]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$?
分類: JavaScript

?


? js 日期正則表達式支持月日驗證?
這款js 日期正則表達式支持月日驗證,我們會一一舉例說明一下有關日期驗證表達式的函數實例了.

function isdate(str){?
var result=str.match(/^(d{4})(-|/)(d{1,2})2(d{1,2})$/);?
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.getDate()==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]{4}-((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)
function isdatetime(str)?
{?
var result=str.match(/^(d{4})(-|/)(d{1,2})2(d{1,2}) (d{1,2}):(d{1,2}):(d{1,2})$/);?
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-DD HH:MM:SS" || "YYYY/MM/DD HH:MM:SS"


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

/^(d{4})-(d{2})-(d{2}) (d{2}):(d{2}):(d{2})$/ ;

這是 yyyy-mm-ddde 的

/^(d{4})-(d{2})-(d{2})$/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249406.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249406.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249406.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

laravel的validator驗證

1.引入對應的類 use Illuminate\Support\Facades\Validator;2.自定義規則,寫在模型,控制器,中間件都可以 $rules [password > required|between;6,20|confirmed, name > required|between;3,8, ];3.自定義提示,laravel自…

HTML,CSS,JaveScript

一、HTML 1、標記語言 標記語言為非編程語言,不具備編程語言具備的程序邏輯 2、html為前端頁面的主體,由標簽、指令與轉義字符(實體)等組成 標簽:被尖括號包裹,由字母開頭包含合法字符的,可以被…

python用戶交互、基本數據類型、運算符

用戶交互 在實際應用中,我們經常需要用戶輸入相應信息,根據用戶輸入信息進行反饋,此時我們需要input/output信息 python中提供了便捷的輸入方法input()和print() 在python3中 name input("…

pom.xml詳細說明

<project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd "><!-- 父項目的坐標。…

maven如何修改本地倉庫與中央倉庫

什么是Maven倉庫 在不用Maven的時候&#xff0c;比如說以前我們用Ant構建項目&#xff0c;在項目目錄下&#xff0c;往往會看到一個名為/lib的子目錄&#xff0c;那里存放著各類第三方依賴jar文件&#xff0c;如 log4j.jar&#xff0c;junit.jar等等。每建立一個項目&#xff0…

Maven項目 之eclipse操作篇

使用eclipse創建maven項目大家應該都很熟悉&#xff0c;這里主要說明如何將已創建的非maven項目修改為maven項目。 1.創建測試項目 創建一個Dynamic Web Project &#xff0c;項目結構如圖。 2.配置工程類型 右擊項目--> Properties --> Project Facets&#xff0c;勾選…

前端jQuery基本語法

jQuery基礎語法 #不管找什么標簽&#xff0c;用什么選擇器&#xff0c;都必須要寫$("")&#xff0c;引號里面再寫選擇器&#xff0c;通過jQuery找到的標簽對象就是一個jQuery對象&#xff0c;用原生JS找到的標簽對象叫做DOM對象。二者可以相互轉換。$()[0]:就是jQuer…

網絡工程:3.1 RIP(Routing Information Protocol)協議

遵循協議&#xff1a; 1、特網rip1標準文件&#xff1a;rfc1058 網站 &#xff1a; https://tools.ietf.org/html/rfc1058 2、因特網rip2標準文件&#xff1a;rfc1723 網站 &#xff1a;https://tools.ietf.org/html/rfc1723 使用工具&#xff1a; GNS3 使用路由器文件&a…

為什么要有 hash 和 history

https://www.cnblogs.com/zhaobao1830/p/9269042.html

2:word定制工作界面

1.2&#xff0c;定制工作界面 一、功能區的折疊和展開 設計選項----右上方的向上的箭頭 功能區的選項&#xff1a;三個&#xff1a;自動隱藏功能區&#xff0c;顯示選項卡&#xff0c;顯示選項卡和命令 二、定制快速訪問工具欄 如何將一些常用的命令放到一個能便捷找到的地方 第…

JBPM中 使用JobExecutor執行timer定義的job

Job executor在jbpm.cfg.xml中是被缺省注釋的&#xff0c;所以只要去掉此行即可通過JobExecutor來定時觸發timer中的event-handler了 Xml代碼 <jbpm-configuration><import resource"jbpm.default.cfg.xml" /><import resource"jbpm.businessca…

二維碼生成

從vs Nugets搜索ThoughtWorks.QRCode下載ThoughtWorks.QRCode.dll private byte[] CreateQrcode(string code){ string enCodeString code;QRCodeEncoder qrCodeEncoder new QRCodeEncoder();qrCodeEncoder.QRCodeEncodeMode QRCodeEncoder.ENCODE_MODE.BYTE;qrCodeEncod…

vue created

https://blog.csdn.net/xdnloveme/article/details/78035065

Qt打開文件對話框同時選中多個文件或單個文件

Qt中打開單個文件 //str_path為文件路徑 QString str_path QFileDialog::getOpenFileName(this, tr("選擇轉碼文件"), tr("/home"), tr("視頻文件(*.mp4 *.m3u8);;所有文件&#xff08;*.*);;")); 打開多個文件 QString strs; QStringList file…

Activiti Explorer安裝

Activiti Explorer安裝 分類&#xff1a; activiti 2014-05-06 19:11 349人閱讀 評論(0) 收藏 舉報 一、Activiti Explorer介紹 流程引擎的用戶控制臺。使用它來啟動新流程&#xff0c;分配任務&#xff0c;查看并認領任務&#xff0c;等等。這個工具也可以用來管理Activ…

一招明白URL和URI的區別

URL和URI的區別(示例)&#xff1a; URL[統一資源定位器]&#xff1a; http://localhost:8080/api/account/queryAccountInfoURI[統一資源定位符]&#xff1a; /api/account/queryAccountInfo解釋&#xff1a;說白了&#xff0c;可以認為url是絕對路徑&#xff0c;uri是相對路徑…

JS ES6中export和import詳解

1.Export 模塊是獨立的文件&#xff0c;該文件內部的所有的變量外部都無法獲取。如果希望獲取某個變量&#xff0c;必須通過export輸出&#xff0c; // profile.js export var firstName Michael; export var lastName Jackson; export var year 1958;或者用更好的方式&am…

巧用地圖

L1-1 天梯賽座位分配&#xff08;20 分&#xff09; 天梯賽每年有大量參賽隊員&#xff0c;要保證同一所學校的所有隊員都不能相鄰&#xff0c;分配座位就成為一件比較麻煩的事情。為此我們制定如下策略&#xff1a;假設某賽場有 N 所學校參賽&#xff0c;第 i 所學校有 M[i] 支…

Mac系統中MongoChef鏈接MongoDB集群的方法

第一步&#xff1a;啟動Mongochef&#xff0c;點擊鏈接按鈕&#xff1b;第二步&#xff1a;打開連接配置面板&#xff0c;填寫數據庫名&#xff1b;第三步&#xff1a;選擇鏈接類型Connection Type&#xff0c;一般分為直接連接和集群鏈接&#xff0c;這里選擇集群鏈接 Replica…

nginx配置文件nginx.conf

user www www;#指定nginx運行的用戶及用戶組,默認為nobodyworker_processes 8;#開啟的線程數&#xff0c;一般跟邏輯CPU核數一致error_log /alidata/log/nginx/error.log crit; #定位全局錯誤日志文件&#xff0c;級別以notice顯示&#xff0c;還有debug,info,warn,error,crit模…