• js校验日期时间的正则表达式


    没想到要校验日期时间还挺费劲,虽然只是要支持个标准格式的yyyy/mm/dd hh:mm:ss。
    js正则表达式如下:
    let reg = /[1-9]\d{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-9]))) ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]/;
    reg.test(“2022/08/04 16:16:22”)
    注意必须是标准的4位年份、2位月、日、时、分、秒。
    解析正则表达式:
    1、年份[1-9]\d{3},支持从1000年到9999年,对于现在的项目来说,够用了。
    2、月份和日期联合:(((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-9])))
    这里有三种情况:
    第一种:对于1、3、5、7、8、10、12月份,是01-31号。所以是(0[13578]|1[02])/(0[1-9]|[12][0-9]|3[01]),其中(0[13578]|1[02])代表了0开头的1、3、5、7、8月,而1[02]代表了10、12月份。0[1-9]|[12][0-9]|3[01]则针对0开头的01-09日、10日到29日、30、31日。
    第二种:对于4、6、9、11月份,只有30号,所以是(0[469]|11)/(0[1-9]|[12][0-9]|30)。
    第三种:对于2月份,02/(0[1-9]|[1][0-9]|2[0-9]),注意这里的2月份并不校验哪一年可以润月,所以单靠一个正则表达式校验日期很难。
    时间就简单多了,后面的([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]代表了小时、分、秒的正则,因为小时是00-23,所以针对0、1开头的后面可以跟0-9,但是对于2开头的,只能是0-3,后面的分钟、秒则是同一个规则,从00-59.

    再结合闰年的判断,需要一个函数来判断一个日期时间是否合法:

    function isDateTime(value) {
            let reg = /[1-9]\d{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-9]))) ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]/;
            if (!reg.test(value)) {
                return false;
            }
            let arr = value.split('/');
            let year = parseInt(arr[0]);
            let month = parseInt(arr[1]);
            let day = parseInt(arr[2]);
            if (month != 2 || day < 29) {
                return true; // 不必校验闰年,肯定是合法时间了
            }
            console.log(year)
            // 能被400整除,或者能被4整除但不能被100整除的都是闰年,其余的年份均为平年
            if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
                console.log("====")
            } else {
                // 平年的2月只有28号
                if (month == 2 && day > 28) {
                    return false;
                }
            }
            return true;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    自动驾驶中的人机互相接管问题讨论
    面试题 01.06. 字符串压缩
    代码随想录训练营day48, 打家劫舍系列问题
    06_快速入门案例实战之电商网站商品管理:集群健康检查,文档CRUD
    HBuilderX修改manifest.json设置,解决跨域问题(CORS、Cross-Origin)
    【跟小嘉学 Rust 编程】二十、进阶扩展
    Spring项目-前端问题:Can‘t find variable:$
    UE4 关卡蓝图实现开关门
    论文阅读(3) 用气泡PIV测量加利福尼亚海狮推进冲程的速度场
    Windows实现到WSL的免密登录
  • 原文地址:https://blog.csdn.net/canlynetsky/article/details/126161680