当前位置:  开发笔记 > 编程语言 > 正文

正则表达式以匹配日期范围

如何解决《正则表达式以匹配日期范围》经验,为你挑选了4个好方法。

有没有人对是否/如何创建正则表达式以匹配任何给定时期的日期有任何想法?

两个例子:

23/11/2008 - 12/04/2010

//The expression would evaluate whether 16/04/2010 was in this range, and return false.
//The expression would determine whether 03/12/2009 was in this range, and return true.

01/09/1984 - 30/04/2001

//The expression would evaluate whether 16/04/1990 was in this range, and return true.
//The expression would determine whether 03/12/2009 was in this range, and return false.

我一直在绞尽脑汁想知道如何提出一些东西,但我没有什么可以接近的.Web上的示例仅对检查日期是否采用特定格式感兴趣,而不关心验证范围.

我在这里标记C#的原因是,这不能在直接正则表达式中完成,并且需要为每个单独的情况手动构建范围正则表达式.



1> Joren..:

将字符串解析为DateTimes并进行比较会不会更容易?



2> 小智..:

我不认为你应该使用正则表达式进行范围检查.首先检查日期是否对正则表达式有效,然后检查它是否属于给定时间段.



3> Heiko Hatzfe..:

别...

使用正则表达式提取日期,然后将其与范围进行比较.这将比创建一个匹配日期范围的正则表达式更容易...

这是着名的"......然后你有2个问题"的经典例子;)



4> Guffa..:

可能,但是编写动态生成正则表达式的代码会有点复杂。

对于范围23/11/2008-12/04/2010,您首先需要将其分为第一年,去年和之间的三个范围。然后,您可以将每年分成几个月,每个月中的天数相同。然后,将每个月长度的日期范围划分为数十个(例如01-09、10-19、20-28)。由此您可以创建一个正则表达式,例如:

^(2[3-9]|30)/11/2008|
(0[1-9]|[12]\d|3[01])/12/2008|
(0[1-9}|1\d|2[0-8])/02/2009|
(0[1-9]|[12]\d|3[01])/(0[13578]|1[02])/2009|
(0[1-9]|[12]\d|30)/(0[469]|11)/2009|
(0[1-9}|1\d|2[0-8])/02/2010|
(0[1-9]|[12]\d|3[01])/0[13]/2010|
(0[1-9]|1[0-2])/04/2010$

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有