gpt4 book ai didi

史上最详细的js日期正则表达式分享

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章史上最详细的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})$/ 。

最后此篇关于史上最详细的js日期正则表达式分享的文章就讲到这里了,如果你想了解更多关于史上最详细的js日期正则表达式分享的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com