当前位置:网站首页>最强日期正则表达式
最强日期正则表达式
2022-04-23 10:37:00 【冰河技术】
一、简单的日期判断(YYYY/MM/DD):
^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$
二、演化的日期判断(YYYY/MM/DD| YY/MM/DD):
^(^(\d{4}|\d{2})(\-|\/|\.)\d{1,2}\3\d{1,2}$)|(^\d{4} 年 \d{1,2} 月 \d{1,2} 日 $)$
三、加入闰年的判断的:
实例:
^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$
分析:
1、什么是合法的日期范围?对于不同的应用场景,这个问题有不同的解释。这里采纳MSDN中的约定:
DateTime 值类 型表示 值 范 围 在公元(基督 纪 元) 0001 年 1 月 1 日午夜 12:00:00 到公元 (C.E.) 9999 年 12 月 31 日 晚 上 11:59:59 之 间 的日期和 时间 。
2、关于闰年的阐释。
关 于公 历闰 年是 这样规 定的:地球 绕 太阳公 转 一周叫做一回 归 年,一回 归 年 长 365 日 5 时 48 分 46 秒。因此,公 历规 定有平年和 闰 年,平年一年有 365 日,比回 归 年短 0.2422 日,四年共短 0.9688 日,故 每 四年增加一日, 这 一年有 366 日,就 是 闰 年。但四年增加一日比四个回 归 年又多 0.0312 日 ,400 年后将多 3.12 日 , 故在 400 年中少 设 3 个 闰 年 , 也就是在 400 年中只 设 97 个 闰 年, 这 样 公 历 年的平均 长 度与回 归 年就相近似了。由此 规 定:年份是整百数的必 须 是 400 的倍数才是 闰 年,例如 1900 年、 2100 年就不是 闰 年 。
首先需要 验证 年份, 显 然,年份范 围为 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}
其中 [0-9] 也可以表示为 \d,但 \d 不如 [0-9] 直观,因此下面我将一直采用 [0-9]
用正则表达式验证日期的难点有二:一是大小月份的天数不同,二是闰年的考虑。
对于第一个难点,我们首先不考虑闰年,假设2月份都是28天,这样,月份和日期可以分成三种情况:
1、月份为 1, 3, 5, 7, 8, 10, 12,天数范围为 01 - 31,匹配MM-DD的正则表达式为:
(0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])
2、月份为 4, 6, 9, 11,天数范围为 01-30,匹配MM-DD的正则表达式为:
(0[469]|11)-(0[1-9]|[12][0-9]|30)
3、月份为 2,考虑平年情况,匹配MM-DD的正则表达式为:
02-(0[1-9]|[1][0-9]|2[0-8])
根据上面的成果,我们可以得到匹配平年日期格式为YYYY-MM-DD的正则表达式:
([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})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))
接着我们来解决第二个难点:闰年的考虑。根据闰年的定义,我们可以将闰年分为两类:
1、能被4整除但不能被100整除的年份。寻找后两位的变化规律,可以很快得到下面的正则匹配:
([0-9]{2})(0[48]|[2468][048]|[13579][26])
2、能被400整除的年份。能被400整除的数肯定能被100整除,因此后两位肯定是00,我们只要保证前两位能被4整除即可,相应的正则表达式为:
(0[48]|[2468][048]|[3579][26])00
2.最强验证日期的正则表达式,添加了闰年的验证 这个日期正则表达式支持YYYY-MM-DD YYYY/MM/DD YYYY_MM_DD YYYY.MM.DD的形式 match : 2015-10-05 2015/10/05not match : 2015-10-05 2015-10-05
完整的正则表达式如下:
((^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(10|12|0?[13578])([-\/\._])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(11|0?[469])([-\/\._])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(0?2)([-\/\._])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([3579][26]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][13579][26])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][13579][26])([-\/\._])(0?2)([-\/\._])(29)$))
闰 年的 2 月份有 29 天,因此匹配 闰 年日期格式 为 YYYY-MM-DD 的正 则 表达式 为 :
(([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29最后,将平年和闰年的日期验证表达式合并,我们得到最终的验证日期格式为YYYY-MM-DD的正则表达式为:(([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})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)DD/MM/YYYY格式的正则验证表达式为:(((0[1-9]|[12][0-9]|3[01])/((0[13578]|1[02]))|((0[1-9]|[12][0-9]|30)/(0[469]|11))|(0[1-9]|[1][0-9]|2[0-8])/(02))/([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}))|(29/02/(([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00)))
版权声明
本文为[冰河技术]所创,转载请带上原文链接,感谢
https://blog.51cto.com/binghe001/5247936
边栏推荐
- 997、有序数组的平方(数组)
- 【leetcode】199.二叉树的右视图
- 得到知识服务app原型设计比较与实践
- Sim Api User Guide(4)
- 206. Reverse linked list (linked list)
- Six practices of Windows operating system security attack and defense
- Realize data value through streaming data integration (2)
- Detailed explanation of MapReduce calculation process
- Image processing - Noise notes
- 206、反转链表(链表)
猜你喜欢
Sim Api User Guide(5)
Wonderful review | deepnova x iceberg meetup online "building a real-time data Lake based on iceberg"
How can swagger2 custom parameter annotations not be displayed
解决方案架构师的小锦囊 - 架构图的 5 种类型
/Can etc / shadow be cracked?
SQL Server cursor circular table data
Redis design and Implementation
MapReduce compression
101. Symmetric Tree
Introduction to wechat applet, development history, advantages of applet, application account, development tools, initial knowledge of wxml file and wxss file
随机推荐
Charles 功能介绍和使用教程
Sim Api User Guide(5)
997、有序数组的平方(数组)
242、有效字母异位词(哈希表)
Realize data value through streaming data integration (3) - real-time continuous data collection
MySQL how to merge the same data in the same table
C#和数据库连接中类的问题
206. Reverse linked list (linked list)
IDEA——》每次启动都会Indexing或 scanning files to index
Jerry's factors that usually affect CPU performance test results are: [article]
LeetCode 1249. Minimum remove to make valid parents - FB high frequency question 1
DBA common SQL statements (2) - SGA and PGA
ansible playbook语法和格式 自动化云计算
DBA common SQL statements (5) - latch related
101. Symmetric Tree
微信小程序中app.js文件、组件、api
242. Valid Letter ectopic words (hash table)
Solution architect's small bag - 5 types of architecture diagrams
Image processing - Noise notes
Leetcode22: bracket generation