3

我需要检查我的生日输入字段的值。应该有几种可能性:dd.MM.yyyy, dd.M.yyyy, d.MM.yyyy,d.m.yyyydd.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})$";
4

2 回答 2

2

如果 regex 不是必须的,您可以尝试使用parseof 方法将字符串转换为日期java.text.SimpleDateFormat,看看是否成功。

如果是这样(您得到一个有效的Date对象),那么您在表单(或输入)中输入了一个有效的日期。如果不成功,则parse函数返回null并且String您输入的内容无效。

是该方法的 javadoc parse

编辑:为了在您不想使用的情况下进行额外验证setLenient,您可以使用Date从中获得的parse并将其转换回 aString使用相同的格式。然后只需将String转换结果与您作为输入提供的结果进行比较。如果它们匹配,则您有有效的输入。

于 2012-04-04T07:52:32.127 回答
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字段进行相同的检查。

我没有检查这是否编译,但你应该明白了。

于 2012-04-04T08:00:18.193 回答