我需要检查我的出生日期输入字段的值。有几种可能性:
以下正则表达式示例仅检查格式验证,但不检查日期是否存在(例如,将允许29.02.2011或47.02.2011)。
编辑:我刚刚创建了以下正则表达式语句,现在它检查月份是否大于12且日期是否大于31。我认为应该先使用正则表达式,然后使用
dd.MM.yyyy
,dd.M.yyyy
,d.MM.yyyy
,d.m.yyyy
,以及dd.MM.yy
,dd.M.yy
,d.MM.yy
,d.m.yy
。例如,您可以输入07.03.1993,7.3.93或其他内容。以下正则表达式示例仅检查格式验证,但不检查日期是否存在(例如,将允许29.02.2011或47.02.2011)。
String s = (String) arg2;
String pattern = "^(\\d{2}|\\d{1})\\.(\\d{2}|\\d{1})\\.(\\d{2}|\\d{4})$";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(s);
if (m.matches()) {
System.out.println(("date correct"));
} else {
System.out.println("date incorrect");
}
编辑:我刚刚创建了以下正则表达式语句,现在它检查月份是否大于12且日期是否大于31。我认为应该先使用正则表达式,然后使用
SimpleDateFormat
验证日期。String s = "^((0?[1-9]|[12][0-9]|3[01])\\.(0?[1-9]|1[012])\\.((19|20)\\d{2})$";
Date d = new SimpleDateFormat("yyyy-MM-dd").parse("2012-01-32");
,那么日期 d 将指向 2 月 1 日,因为天数“溢出”到了该月。 - AlderathsetLenient(false)
,然后你的日期将会抛出异常。 - yves.beutlerDate
包含什么?我认为返回的Date
对象不会允许在非闰年中使用 29/02。你可以尝试使用静态方法java.sql.Date.valueOf
并使用java.sql.Date
而不是java.util.Date
。 - lucian.pantelimonSimpleDateFormat
和我的正则表达式。如果它有效,我会向您展示。 - yves.beutler