我正在使用以下正则表达式来验证 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/