• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    史上最详细的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正则表达式大全(整理详细且实用)
    • javascript 手机号码正则表达式验证函数
    • js正则表达式基本语法(精粹)
    • js各种验证文本框输入格式(正则表达式)
    • Javascript校验密码复杂度的正则表达式
    • JavaScript 正则表达式 验证整数、小数、实数、有效位小数最简单
    • JavaScript 表单验证正则表达式大全[推荐]
    • JS使用正则表达式验证身份证号码
    • JS正则表达式验证数字(非常全)
    • JS正则表达式封装与使用操作示例
    上一篇:使用正则表达式匹配[***]样式的字符串
    下一篇:匹配5到10位无重复数字的正则表达式
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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