正则表达式匹配时间区间
2个回答
展开全部
正则表达式擅长的事匹配,不是判断,所以在做日期合法性判断的时候会比较复杂。
所求正则表达式如下:
2015-08-(3[0-1]|[1-2][0-9]|0[8-9])|2015-(10|12)-(3[0-1]|[1-2][0-9]|0[1-9])|2015-(9|11)-(30|[1-2][0-9]|0[1-9])|2016-02-([1-2][0-9]|0[1-9])|2016-(1,3,5,7,8)-(3[0-1]|[1-2][0-9]|0[1-9])|2016-(4,6,9)-(30|[1-2][0-9]|0[1-9])|2015-10-(10|0[1-9])
解释:
2015-08-(3[0-1]|[1-2][0-9]|0[8-9]) # 匹配8月合法日期
|
2015-(10|12)-(3[0-1]|[1-2][0-9]|0[1-9]) # 匹配15年大月合法日期
|
2015-(9|11)-(30|[1-2][0-9]|0[1-9]) # 匹配15年小月合法日期
|
2016-02-([1-2][0-9]|0[1-9]) # 匹配16年2月合法日期
|
2016-(1,3,5,7,8)-(3[0-1]|[1-2][0-9]|0[1-9]) # 匹配16年大月
|
2016-(4,6,9)-(30|[1-2][0-9]|0[1-9]) # 匹配16年小月
|
2015-10-(10|0[1-9]) # 匹配16年10月
# 中间用或者符号|连接表示或
如果不考虑大月小月,可以简化一点(统一使用大月的正则匹配),但是还是最少得有4行。
所求正则表达式如下:
2015-08-(3[0-1]|[1-2][0-9]|0[8-9])|2015-(10|12)-(3[0-1]|[1-2][0-9]|0[1-9])|2015-(9|11)-(30|[1-2][0-9]|0[1-9])|2016-02-([1-2][0-9]|0[1-9])|2016-(1,3,5,7,8)-(3[0-1]|[1-2][0-9]|0[1-9])|2016-(4,6,9)-(30|[1-2][0-9]|0[1-9])|2015-10-(10|0[1-9])
解释:
2015-08-(3[0-1]|[1-2][0-9]|0[8-9]) # 匹配8月合法日期
|
2015-(10|12)-(3[0-1]|[1-2][0-9]|0[1-9]) # 匹配15年大月合法日期
|
2015-(9|11)-(30|[1-2][0-9]|0[1-9]) # 匹配15年小月合法日期
|
2016-02-([1-2][0-9]|0[1-9]) # 匹配16年2月合法日期
|
2016-(1,3,5,7,8)-(3[0-1]|[1-2][0-9]|0[1-9]) # 匹配16年大月
|
2016-(4,6,9)-(30|[1-2][0-9]|0[1-9]) # 匹配16年小月
|
2015-10-(10|0[1-9]) # 匹配16年10月
# 中间用或者符号|连接表示或
如果不考虑大月小月,可以简化一点(统一使用大月的正则匹配),但是还是最少得有4行。
追问
不用判断日期是否合法!
因为在外部已经检验过入参
需要效果就是 输入一个 yyyy-MM-dd 的时间,用正则匹配一下是否外在规定的时间区间内!
追答
2015-08-([1-3][0-9]|0[8-9])
|
2015-(09|1[0-2])-[0-3][0-9]
|
2016-0[1-9]-[0-3][0-9]
|
2016-10-(10|0[1-9])
原理同上,减少了部分判断合法性的正则,缩起来就是这样:
2015-08-([1-3][0-9]|0[8-9])|2015-(09|1[0-2])-[0-3][0-9]|2016-0[1-9]-[0-3][0-9]|2016-10-(10|0[1-9])
测试可用!
望采纳,认真回答不想掉采纳率!
2015-08-25
展开全部
<!DOCTYPE HTML>
<html>
<head>
<title>Page Title</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script>
var reg = /^((2015\-((0?8\-(0?[89]|[12]\d|30))|((0?9|10|11|12)\-(0?[1-9]|[12]\d|30))))|(2016\-((0?[1-9]\-(0?[1-9]|[12]\d|30))|(10\-(0?[1-9]|10))))|(2015\-(0?8|10|12)\-31)|(2016\-(0?[13578]|10)\-31))$/;
var from = new Date("2015-08-08,0:0:0");
var to = new Date("2016-10-10,0:0:0");
for(var i = from; i <= to; i.setDate(i.getDate() + 1)){
var m = i.getMonth() + 1;
m = m < 10 ? "0" + m : m;
var d = i.getDate();
d = d < 10 ? "0" + d : d;
var str = i.getFullYear () + "-" + m + "-" + d;
if(!reg.test(str)) {
alert(str);
break;
}
console.log(str + ": " + reg.test(str));
}
</script>
</head>
<body>
<header>
<nav>
</nav>
</header>
<h1>Page Title</h1>
<!-- content goes here -->
<footer>
</footer>
</body>
</html>
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询