史上最详细的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)
{js实现正则表达式校验
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]&&Date()==result[4]&&Hours()==result[5]&&Minutes()==result[6]&&Seconds()==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})$/
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论