java - 用于日期验证的正则表达式

标签 java regex

我正在使用以下正则表达式来验证 java 中的日期:

"^(0?[1-9]|[12][0-9]|3[01])[-./](0?[1-9]|1[012])[-./]((19|20)\\d\\d)$"

但它也采用 21-12.2014 或 21.12/2014 等格式作为有效日期。我知道这是因为我在正则表达式中使用了 [-./] 。如何避免这个问题?

最佳答案

这里需要使用反向引用。

"^(0?[1-9]|[12][0-9]|3[01])([-./])(0?[1-9]|1[012])\\2((19|20)\\d\\d)$"
上述正则表达式中的

\\2 指的是组索引 2 中存在的字符。

注意:不要使用正则表达式解析日期。

示例:

String s1 = "21-12-2014";
String s2 = "21-12/2014";
System.out.println(s1.matches("^(0?[1-9]|[12][0-9]|3[01])([-./])(0?[1-9]|1[012])\\2((19|20)\\d\\d)$"));
System.out.println(s2.matches("^(0?[1-9]|[12][0-9]|3[01])([-./])(0?[1-9]|1[012])\\2((19|20)\\d\\d)$"));

输出:

true
false

关于java - 用于日期验证的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28811150/

相关文章:

java - 使用 Gson 解析 JSON(或 java 的替代方案)

Python 正则表达式无法正常工作

java - 任何带有回车符的字符

javascript - 用于在 <input> JQuery 中重复(相似)表达式的正则表达式

java - 如何获取特定字符串前的空格索引?

java - 使用类路径上使用 JDK 8 构建的类来编译面向 1.7 的 Java 类

java - 更新列表中的现有对象

java - 如何使用for循环从jsp获取jquery中的值?

javascript - Javascript 中的正则表达式替换?

java - java中访问jar位于资源的多平台方式