3

生年月日入力フィールドの値を確認する必要があります。dd.MM.yyyydd.M.yyyyd.MM.yyyyd.m.yyyyおよびdd.MM.yydd.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

parse正規表現が必須でない場合は、メソッドを使用して文字列を日付に変換してみて、java.text.SimpleDateFormat成功するかどうかを確認できます。

その場合 (有効なDateオブジェクトを取得)、フォーム (または入力) に有効な日付が入力されています。成功しない場合、parse関数は戻りnullString入力は無効です。

parseメソッドの javadoc は次のとおりです

編集: を使用したくない場合の追加の検証のために、取得したを使用して、同じ形式を使用して に戻すことsetLenientができます。次に、変換の結果を入力として提供したものと比較します。それらが一致する場合、有効な入力があります。DateparseStringString

于 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 に答える