工作中经常需要对用户输入的日期进行验证,常用的方式是使用正则对格式进行验证。比如如下:

一、简单的日期判断(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-))$

...

诸如此类。

实际上仅仅对字符串做验证,并不严密,而且费力。

下面介绍一种结合正则和日期函数的验证方式:

        /*** 验证日期格式* @param date* @return {boolean}*/function checkDate(date) {var result = date.match(/^(\d{1,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]);}

利用正则验证后的结果尝试构造日期,然后一一对比。如果构造失败或对比结果有不同的,则验证不通过。

转载于:https://www.cnblogs.com/guyezhai/p/6729663.html

记一种验证日期格式的正则表达式相关推荐

  1. 日期格式的正则表达式

    日期的格式多种多样,有如:"yyyy-MM-dd HH:mm:ss"."yyyy/MM/dd HH:mm:ss"."yyyyMMdd HH:mm:ss ...

  2. php验证年月日的正则表达式,关于正则表达式:在php中验证日期格式

    我正在尝试使用PHP验证日期. 我希望以下格式有效: d/m/yy d/m/yyyy dd/m/yy dd/m/yyyy d/mm/yy d/mm/yyyy dd/mm/yy dd/mm/yyyy 我 ...

  3. oracle 正则表达式匹配日期格式,利用正则表达式找出不合符的日期

    很多时候我们的日期可能存放的是字符串类型,在插入的时候也很有可能插入的日期格式不正确, 因此我们需要找出这些不合符的日期格式,来此来修正.当然可以使用TO_DATE函数一个一个的转换来找出不合法的日期 ...

  4. C# 一种英文日期格式转换

    Wed May 26 14:59:00 CST 2021 针对这种,我对Wed May 26,采用的方法是dt.DayOfWeek.ToString().Substring(0,3)+dt.ToStr ...

  5. 验证英文日期格式的正则表达式

    matchDate(){ // let dateString = 'Jan 01, 2019' let dateString = 'January 01, 2019' var dateRegex =  ...

  6. joi模块验证日期格式_python datetime模块详解

    一.datetime模块介绍 通过print(dir(datetime)),我们可以看到模块内属性和类: ['MAXYEAR', 'MINYEAR', '__builtins__', '__cache ...

  7. 验证日期时间的正则表达式

    可以不要秒数的: ^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|( ...

  8. 验证手机号码格式的正则表达式编写思路详解

    Cooking Regex微信公众号 正则表达式学习 一.获取目前中国三大运营商的手机号码段 手机号码段 如上图我们可以根据不同运营商的号码段来编写正则,也可以进行统一校验的编写,我这边主要是编写统一 ...

  9. python按照号段生成手机号接收验证码,验证手机号码格式的正则表达式编写思路详解...

    一.获取目前中国三大运营商的手机号码段 如上图我们可以根据不同运营商的号码段来编写正则,也可以进行统一校验的编写,我这边主要是编写统一校验的. 二.思路 1.为了得到号码段的规律,我们可以把它们先进行 ...

最新文章

  1. python从字典里搜索_Python:在字典中搜索字典的函数
  2. [转]sudoers设置
  3. leetcode 474. 一和零(dp)
  4. LeetCode 322. 零钱兑换(DP)
  5. spark的朴素贝叶斯分类原理
  6. mysqldump实现数据备份及灾难恢复
  7. iPad 读不到 USB,在 Mac 上如何进行 USB 格式化?
  8. 计算机专业 本科论文,计算机专业本科毕业设计和毕业论文的感悟
  9. 解析函数论 Page 22 达朗贝尔判别法 VS 柯西判别法
  10. Transformer计算量和过程统计
  11. tensorflow-tf基础
  12. Daily Scrum Meeting 11.04
  13. 求一元二次方程的根(YZOJ-1048)
  14. Redis源码阅读,从入门到放弃
  15. ResNet网络的改进版:ResNeXt
  16. android 打包多个apk注意事项:
  17. 亚马逊将推出VR购物应用,支持Vive Rift PSVR三大平台
  18. c语言编程复制快捷键,C语言再学习 -- 常用快捷键
  19. 企业画像在企业活动中的价值
  20. cve-2019-07-08

热门文章

  1. 为什么要重写 hashcode 和 equals 方法?
  2. KA,连接池居然这么简单?
  3. 分布式的事务该怎么做?
  4. 奇安信为什么大量招人_券商招人鄙视链:985学历vs美本学历,究竟谁垫底?
  5. java不可编辑的文本框_如何使编辑文本不可编辑,但在JAVA中可点击
  6. 成功解决AttributeError: module ‘dask.array.numpy_compat‘ has no attribute ‘take_along_axis‘
  7. Dataset之babyboom.dat:babyboom.dat数据集的简介、安装、使用方法之详细攻略
  8. Python编程语言学习:for循环中常用方法经验技巧(利用enumerate函数对列表实现自带索引等)之详细攻略
  9. 成功解决ModuleNotFoundError: No module named 'keras_retinanet.utils.compute_overlap'
  10. AI英特尔杯公开课:2019.06.27在线直播《研究生人工智能创新大赛—AI赋能,创新引领》课堂笔记和感悟(二)