我需要检查生日输入字段的值。应该有以下几种可能性:dd.MM.yyyy
,dd.M.yyyy
,d.MM.yyyy
,d.m.yyyy
以及dd.MM.yy
,dd.M.yy
,d.MM.yy
,{ {1}}。例如,您可以输入07.03.1993,7.3.93或其他任何内容。
以下正则表达式示例仅检查格式验证,但不检查日期是否存在(例如,将允许29.02.2011或47.02.2011)
d.m.yy
编辑:我刚刚创建了以下正则表达式语句,现在检查月份是否大于12且日期大于31.我认为我应该首先使用正则表达式,然后使用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");
}
<验证日期/ p>
SimpleDateFormat
答案 0 :(得分:2)
如果必须使用正则表达式,您可以尝试使用parse
java.text.SimpleDateFormat
方法将字符串转换为日期,看看是否成功。
如果是(您获得有效的Date
对象),则表单(或输入)中输入了有效日期。如果不成功,parse
函数将返回null
,并且您输入的String
无效。
Here是parse
方法的javadoc。
编辑:如果您不想使用setLenient
进行额外验证,可以使用Date
获得的parse
并将其转换为String
使用相同的格式。然后,只需将转化产生的String
与您提供的产品作为输入进行比较。如果匹配,您就获得了有效的输入。
答案 1 :(得分:0)
您可以拆分它以获取日期的日期和月份。
然后你可以做类似的事情:
final int dayToCheck = 32; // user input
final int month = 2; // user input
final int year = 1981; // user input
final Calendar cal = Calendar.getInstance();
cal.set(year, month, 1); // day doesn't need to be the user input, it can be any day in the month you want to check
if (cal.getActualMaximum(Calendar.DAY_OF_MONTH) > dayToCheck) {
// the day is invalid
}
if (cal.getActualMinimum(Calendar.DAY_OF_MONTH) < dayToCheck) {
// again, the day is invalid
}
您可以使用Calendar.MONTH
字段进行相同的检查。
我没有检查过这是否会编译,但你应该明白这一点。