【发布时间】:2014-01-10 21:30:13
【问题描述】:
用户给了我一个字符串,它应该代表过期日期,格式为“yyyy-mm-dd”。
我想验证它是否是一个日期,我就是这样做的:
try {
DateFormat df = new SimpleDateFormat("yyyy-mm-dd");
System.out.println("Validating " + date + " as date");
df.parse(date);
}
catch (ParseException ex) {
// not yyyy-mm-dd date.
System.out.println(": Bad");
out.println(date + " cannot be parsed as a date. format: yyyy-mm-dd.");
return;
}
如果用户给我"2014-02-02gy.",
然后打印:"Validating 2014-02-02gy. as date"
即没有抛出异常。
为什么?以及如何验证日期?提前致谢。
编辑:使用正则表达式作为评论者建议之一:
if (!date.matches("\\d{4}-\\d{2}-\\d{2}") {
out.println("Not a date");
}
【问题讨论】:
-
如果它遵循严格的格式(yyyy-mm-dd),我想你可以使用正则表达式来做一个快速的有效性测试。
-
请注意,月份是
M。 -
你可以使用正则表达式:
"2014-02-02".matches("\\d{4}-\\d{2}-\\d{2}"),但这也适用于"2013-31-31"。 -
如果你能解析出一个明确的日期,你为什么要关心是否有额外的垃圾?
-
@Jaxo 我不确定 - 但 我 不在乎 ;-)
标签: java validation date datetime