正则表达式匹配时间区间

例如:2015-08-08与2016-10-10的区间这个正则表达式该怎么写?... 例如:2015-08-08 与 2016-10-10 的区间
这个正则表达式该怎么写?
展开
 我来答
绯弹亚丝娜
推荐于2016-02-24 · TA获得超过1094个赞
知道小有建树答主
回答量:330
采纳率:100%
帮助的人:132万
展开全部
正则表达式擅长的事匹配,不是判断,所以在做日期合法性判断的时候会比较复杂。
所求正则表达式如下:
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>
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式