Java正则表达式验证日期范围

时间:2016-03-08 13:18:01

标签: java regex date date-range

我在为一系列日期生成正则表达式时遇到问题。 例如,此范围[2015-11-17, 2017-10-05],我该怎么办?使用正则表达式验证是否有一个日期属于该范围。

第二个问题是否有可能有一个通用正则表达式,我可以在几个日期范围内使用,只用正则表达式替换我的新范围中的几个值,并且正则表达式继续验证一系列日期,但是新的范围。在此先感谢您的帮助=)

2 个答案:

答案 0 :(得分:0)

不要使用Regex

正如评论所述,正则表达式不适用于一系列日期,也不适用于任何时间段。正如只看文本的语法而不是语义(意思)一样,正则表达式是“愚蠢的”。

java.time

使用Java 8及更高版本中内置的java.time框架。

将字符串解析为LocalDate个对象。

LocalDate start = LocalDate.parse( "2015-11-17" );

通过调用isEqual,isBefore和isAfter方法进行比较。

请注意,我们通常在日期工作中使用半开放式方法,其中开头是包含在内的,而结尾是独占的。

Stack Overflow上的许多其他问题和解答已经涵盖了这些问题。所以我在这里缩写了我的讨论。

答案 1 :(得分:0)

只是为了完整性:您实际上可以使用正则表达式来识别任何有限的字符串集,例如特定的日期范围,但它更像是学术练习而不是实际推荐的用法。 然而,如果您正在编写一些神秘的硬件,那么实际上它是必要的。

假设输入始终是给定格式的有效日期,则示例的正则表达式可以包含:

2015-0[1-9].* - 2015年1月至9月

2015-10.* - 2015年10月

2015-11-0[1-9] - 2015年11月1日至9日

2015-11-1[0-7] - 2015年11月10日至17日

2016.* - 2016年的所有日期

2017年类似地添加,使用|进行分离(a | b | c | ...),应用你正在使用的正则表达式实现的转义,然后你有你的日期检查器。如果输入不能保证是有效日期,那么它会变得有点复杂,但仍然可能。