用于验证日期范围的Java正则表达式
我在生成一系列日期的正则表达式时遇到问题。 例如,这个范围[2015-11-17, 2017-10-05]
,我该怎么办?验证是否有日期使用正则表达式登录到该范围。用于验证日期范围的Java正则表达式
第二个问题是否可以有一个通用的正则表达式,我可以用于多个日期范围,只用正常范围替换正则表达式中的几个值,而正则表达式继续验证日期范围,但与新的范围。预先感谢帮助=)
不要使用正则表达式
正如注释状态,正则表达式是不恰当的日期范围,也没有任何时间跨度。从仅考虑文本的语法而不考虑语义(含义)的意义上来说,正则表达式的意图是“愚蠢的”。
java.time
使用内置于Java 8及更高版本中的java.time框架。
将您的字符串解析为LocalDate
对象。
LocalDate start = LocalDate.parse("2015-11-17");
通过调用isEqual,isBefore和isAfter方法进行比较。
请注意,我们通常在日期时间工作中使用Half-Open方法,其中开头是包含性的,而结尾是排他性的。
这些问题已经在堆栈溢出的许多其他问题和答案中进行了介绍。所以我在这里缩小了我的讨论范围。
只是为了完整:您实际上可以使用正则表达式来识别任何有限的字符串集合,例如特定的日期范围,但它比实际推荐的用法更像是一次学术练习。 但是,如果你碰巧正在编程一些神秘的硬件,它实际上可能是必要的。
假设输入是始终在给定格式的有效日期,你的例子正则表达式可以包括:
2015-0[1-9].*
- 2015年一月至九月
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 | ...),应用您使用的正则表达式实现的转义,然后您有日期检查器。如果输入不能保证是有效的日期,它会变得更复杂一些,但仍然有可能。
不要使用正则表达式,从字符串中创建一个日期对象并使用API检查范围。 – Maroun
正则表达式用于验证数据的语法,而不是其值。用逗号分隔,解析LocalDate,使用'isBetween(start,end)'。 – Dariusz
使用正则表达式验证日期范围是一个非常糟糕的主意。简单的一年验证可能会像[this regex]一样(http:// stackoverflow。COM /问题/ 35825374/PostgreSQL相关的正则表达式替换/ 35825591)。 – 2016-03-08 13:31:24