当前位置:网站首页>js校验日期时间的正则表达式
js校验日期时间的正则表达式
2022-08-05 20:11:00 【-快乐的程序员-】
没想到要校验日期时间还挺费劲,虽然只是要支持个标准格式的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;
}
边栏推荐
- 有一种爱情是逢二便可进位的二进制哦。
- SQL injection basic learning
- SwiftUI案例:天气
- SwiftUI Case: Weather
- TypeError:列表索引必须是整数或片,不是str
- Win10 Anaconda 虚拟环境安装 Pytorch GPU 2022-7-24
- 151. Reverse words in string - double pointer method
- "The Sea of Stars" opens an "excess ticket" paid by Justin Sun for the future of mankind
- 第02篇:分布式负载均衡
- 【HMS core】【Analytics Kit】华为分析服务常见问题FAQ 2
猜你喜欢
随机推荐
89.(cesium之家)cesium聚合图(自定义图片)
住宅代理随用随付——小型项目的最佳选择
SwiftUI案例:天气
codeforces:D. Chip Move【dp + 逆向思维考虑】
【代码解读】超详细,YOLOV5之build_targets函数解读。
fastapi提供文件下载接口
Make a Reliable Delay Queue with Redis
极光推送之自定义声音踩坑记录(持续更新)
第06篇:池化技术
【SVN】搭建一个代码版本控制器(SVN)
【idea】Rainbow Brackets代码高亮设置
【StoneDB子查询优化】subquery子查询-exists子查询的剔除遍历处理
C语言中的三大自建类型
SwiftUI case: size adaptive text box
Summary of Vim Commands
SwiftUI案例:自定义加载动画
中信证券怎么开户?开户安全吗?
图床软件要收费,算了我自己写一个开源免费的。
张高兴的 .NET IoT 入门指南:(八)基于 GPS 的 NTP 时间同步服务器
Leetcode 算法面试冲刺 热题 HOT 100 刷题(300 301 309 312 322)(六十七)





![vi learning (1) [introduction/basic usage/work mode]](/img/9d/059c7679e60b2509ff5536040201aa.png)



