修正正则匹配日期---基于网络未知大神的正则

今天工作时需要用到日期格式检验,于是发现未知的大神贡献的一套正则表达式【1】,看起来很复杂;

但是经过测试发现有些问题:

((\d{2}(([02468][048])|([13579][26]))[-/\s]?((((0?[13578]
)|(1[02]))[-/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[4
69])|(11))[-/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[-/
\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([1
3579][01345789]))[-/\s]?((((0?[13578])|(1[02]))[-/\s]?((
0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[-/\s]?((
0?[1-9])|([1-2][0-9])|(30)))|(0?2[-/\s]?((0?[1-9])|(1[0-9]
)|(2[0-8]))))))

经测试发现是存在一些问题的,如 1980-2-29只能匹配到1980-2-2,2100-2-29(非闰年)是会进入第一个闰年匹配的,这样就会出现闰年匹配和日期匹配不正确的情况。

在此基础上,我做了一些修改,在此贴出:

(((((([2468][048])|([13579][26]))00)|(\d{2}((([2468][048])|([02468][48]))|([13579][26]))))
[-/\s]?((((1[02])|(0?[13578]))[-/\s]?(([1-2][0-9])|(3[01])|(0?[1-9])))|(((11)|(0?[469]))
[-/\s]?(([1-2][0-9])|(30)|(0?[1-9])))|(0?2[-/\s]?(([1-2][0-9]))|(0?[1-9]))))
|((((([2468][1235679])|([13579][01345789]))00)|(\d{2}(([02468][1235679])|([13579][01345789]))))
[-/\s]?((((1[02])|(0?[13578]))[-/\s]?(([1-2][0-9])|(3[01])|(0?[1-9])))|(((0?[469])|(11))
[-/\s]?(([1-2][0-9])|(30)|(0?[1-9])))|(0?2[-/\s]?((1[0-9])|(2[0-8]))|(0?[1-9])))))

下面对改动的正则分块做一下说明:

1.匹配闰年:

(((([2468][048])|([13579][26]))00)|(\d{2}((([2468][048])|([02468][48]))|([13579][26]))))

1.1 匹配可被400整除的年份

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

1.2 匹配可被4整除但不能被100整除的年份

(\d{2}((([2468][048])|([02468][48]))|([13579][26])))

1.3 注:经查阅 4的倍数有以下特征:(1):十位数为偶数时且个位是4的倍数的(含0),十位数为奇数且个位数为偶数且个位数字不是4的倍数; (2)十位和个位可被4整除则此数字即可被4整除;【2】

2.匹配月日;需注意2月分的29号 和区别大小月份,1 3 5 7 8 10 12 这些是大月

((((1[02])|(0?[13578]))[-/\s]?(([1-2][0-9])|(3[01])|(0?[1-9])))|(((11)|(0?[469]))[-/\s]?(([1-2][0-9])|(30)|(0?[1-9])))|(0?2[-/\s]?(([1-2][0-9]))|(0?[1-9])))

2.1 解决02-29只匹配到02-2的问题

改动前:(0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))
改动后:([1-2][0-9])|(3[01])|(0?[1-9])))|(((11)|(0?[469]))

由于未知的作者将最初将补零的验证置前,且0为匹配1次或0次,则匹配到[1-9]后不再进行 ‘或’ 后的匹配;

3. 匹配平年

(((([2468][1235679])|([13579][01345789]))00)|(\d{2}(([02468][1235679])|([13579][01345789]))))

3.1 匹配不能被4整除,但可以被100整除的年份;

((([2468][1235679])|([13579][01345789]))00)

3.2 匹配既不能被4整除,又不能被100整除的年份;

(\d{2}(([02468][1235679])|([13579][01345789])))

平年的月与闰年月只需注意区分2月即可

经测试通过验证;

如有不对,敬请指教

参考:

【1】http://www.php230.com/1409454901.html

【2】https://www.zybang.com/question/61a275532cdfa6fe88b1360ed4ec6182.html

时间: 2024-11-19 11:32:19

修正正则匹配日期---基于网络未知大神的正则的相关文章

大神手机下乡刷墙的价值

刷墙!简单粗暴,是接近农村农户最快的方式. 据报道,2015年初,大神手机在全国8省56县区合计刷墙560余面,刷墙让更多的消费者了解并购买了大神手机. 农村市场的重要性 目前,全国地级市500个左右,县级市2100多个,乡镇4万多个,农村家庭占家庭总量的67.6%,众所周知的原因,农村人使用的手机远不能跟城市相比. 近年的"新农村建设","城镇化建设",使得农村居民收入增速不断提高,在一些城镇化建设较快的乡镇,返乡人员增多,消费能力也不断提升,农村已成为智能手机不

FPGA做正则匹配和网络安全,究竟有多大的优势?

FPGA做正则匹配和网络安全,究竟有多大的优势? 西电通院专用集成电路课程学习 云导播 网络安全已经被提升为国家战略的高度,高校里面的新增的一级学科,去年9月份,中央网信办.教育部公布了“一流网络安全学院建设示范项目高校”名单.但网络安全的范围实在太大,平常所说的黑客.网络病毒等软件.操作系统.固件级别的网络攻击或防范办法仅仅是常见的传统网络安全范畴,本文所说的是基于硬件级别的网络安全方法,比较学术的分类有可信芯片研究.网络安全防护的硬件实现等.硬件领域网络安全的研究随着近几年挖矿芯片.AI芯片

两项基于网络的“黑客”技术

两项基于网络的“黑客”技术 软件开发和测试中网络环境迁移和数据分析 1   导读 关于智能路由器的这两项技术的介绍,想想还是搞个比较有噱头的标题才能吸引人进来细看的.本文确实是介绍的两个关于智能路由器的hack技术,但是却是将这两项技术用于软件开发过程中的正途中的.当然如果有悟性,也可以将此技术用于不违法的恶作剧玩一下也无妨. 本文提到的两个基于网络的hack技术: DNS劫持 数据抓包 基本本质上就是路由器设备的两个主要网络功能: 网关配置功能 网关数据中转功能 但是用于软件开发的正途,就变换

[转载]正则匹配任意字符(包括换行)

(注:元字符包括 | ( ) [ ] { } ^ $ * + ? . ) 匹配中文字符的正则表达式: [u4e00-u9fa5]评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^x00-xff]评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 匹配空白行的正则表达式:ns*r评注:可以用来删除空白行 匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?</>|<.*? />评注:网上流传

架构风格与基于网络应用软件的架构设计(一)

作者:Roy Thomas Fielding 译者:李锟 论文摘要 Web(万维网,英文全称World Wide Web,简称Web)的成功,很大程度上是因为其软件架构的设计满足了拥有互联网规模(Internet-scale)的分布式超媒体系统的需求.在过去10年间,通过对定义Web架构的规范所做的一系列修改,Web以迭代的方式不断地发展着.为了识别出Web需要改善的那些方面,并且避免对其进行不必要的修改,需要一种现代的Web架构模型,用来指导Web的设计.定义和部署. 软件架构方面的研究探索的

Flask基础(3):session、flash、特殊装饰器、蓝图、路由正则匹配、上下文管理 &amp; flask-session

Session: Flask 默认将 session 以加密的形式放到了浏览器的 cookie 中 Flask 的 session 就是一个字典,字典有什么方法 session 就有什么方法 flask session 原理:当请求刚进来时,flask会读取cookie中 session(配置文件中能改这个名称) 对应的值,将这个值解密并反序列化成为一个字典放入内存, 以便视图函数使用: 在视图函数中使用时,按照字典的方法使用: 当请求结束时,flask会读取内存中字典的值,进行序列化+加密,然

php正则匹配用户名必须包含字母和数字且大于6位

php正则匹配用户名必须包含字母和数字且大于6位 UEditor 1.4.3版本中去掉本地自动保存功能 右键菜单没有新建文本文档txt 常见HTTP错误代码大全 http常见状态码 eclipse内存溢出错误 为什么井盖是圆的?--揭开面试题的神秘面目! Linux Centos 6.6搭建SFTP服务器 密码强度检测 JS判断检测用户输入密码强度代码 对程序员来说,提高薪水最好的建议是什么? CSS3仿淘宝右侧固定导航悬浮层 jQuery仿淘宝网登录拖动滑块验证码代码 jQuery单击div更

基于网络的 Red Hat 无人值守安装

基于网络的 Red Hat 无人值守安装 本文介绍了 PC 平台上的一种快速 Red Hat Linux 安装方案.它具有很高的自动化程度--用户只需手工启动机器并选择从网络启动,就可以完成整个安装过程.在需要批量安装大量 Red Hat Linux 系统和需要技术人员 Red Hat Linux 安装支持的情况下,这种方案可以节省大量的时间.而且由于不需要额外的软件和光驱和软驱等硬件设备,在成本上也有很大优势.所有安装 Red Hat Linux 的开发/测试人员,和 IT 支持人员都能够从本

网络空间大搜索技术

由于泛在网络空间.网络应用模式和大数据的发展,国内研究人员对网络空间搜索技术有了新的认识,逐渐形成了网络空间智慧搜索暨网络空间大搜索技术. 国家自然科学基金委员会第120期双清论坛于9月28日-29日在北京召开.本次论坛主题为网络空间智慧搜索基础研究,共邀请了国内外25所大学和科研机构的41位著名专家参会.本次论坛由信息科学部.管理科学部.地球科学部.数理科学部和政策局联合主办,论坛主席由方滨兴院士.吴曼青院士.贾焰教授和陈熙霖研究员共同担任. 论坛开幕式由信息二处刘克处长主持,信息科学部常务副