正则表达式用于日期验证

时间:2015-03-02 13:36:36

标签: java regex

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

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

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

2 个答案:

答案 0 :(得分:2)

在这里你需要使用反向引用。

"^(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

答案 1 :(得分:0)

根本不使用正则表达式。只需解析日期,因为无论如何你显然都要这样做。

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Date d = sdf.parse(dateStr.replaceAll("[./]", "-"));

捕获无效日期的例外。