-1

このコードは、クラス パターン (java.util.regex.Pattern) の使用に関する簡単な知識で作成しました。もちろん、 から までのすべての実際の日付に対して true を返し0000-00-00ます9999-12-31。しかし、残念ながら、 に対してはまだ true を返します2013-22-01,2013-01-99。. 。等。正しく検証するのを手伝ってください。

String regex = "([0-9]){4}+([-])?([0-2]){2}+([-])?([0-9]){2}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(textFieldName.getText());
return matcher.find();
4

5 に答える 5

1

DateFormat を使用することは非常に優れていますが、これにより正しい方向に向けることができます。

何をするか([0-9]){4}(-[0-1][1-2]-([0-2][1-9]|3[0-1]))は Debuggex で説明されていますが、簡単で汚いランスルーを次に示します。

  • 数字 0 ~ 9 の 4 つのグループを許可します。
  • 暗黙的なダッシュを提供します。
  • 0 または 1 のグループを許可します。
  • 1-2 のグループを許可します。
  • 暗黙的なダッシュを提供します。
  • また:
    • 数字の 0 ~ 2 と 1 ~ 9 のグループを許可する、または
    • 暗黙の 3 と 0-1 のグループを許可します。

2 月の楽しい日程が表示されますが、概して、これで正しい方向に進むことができます。もう少し正規表現のトリックを使えば、すべての月とうるう年をカバーできます。

于 2013-03-05T03:54:32.507 に答える
0

試す

boolean matches = s.matches("\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])");

毎月何日あるかを知ることは可能ですが、うるう年を正規表現に認識させることは不可能です

于 2013-03-05T04:02:21.780 に答える
0

この正規表現を使用します

String reg = "\\^(19|20)\\d\\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$";

参照

于 2013-03-05T03:56:38.010 に答える
0

:何らかの理由でDateFormat、日付形式を一致させる最も簡単な方法であるクラスを使用できないと思います。

それを行う方法は、一致できるもののリストを提供することです。たとえば、月については、「0 と 1 から 9 の数字」または「1 と 0 から 2 の数字」のいずれかが必要です。

これは次のように行われます (月の部分のみ):

(0[1-9]|1[0-2])

これにより、正規表現を完成させる方法がわかります。

残念ながら、日数は日によって異なるため、日数についてはより複雑です。すべきことは、2 つの整数を一致させてから、Matcher.group(int)メソッドを使用してマッチャーからグループを取得し、値を手動で検証することです。

別の方法は、それをすべて取り除き、単純に "-" で分割することString.split(String)です。次に、3 つのサブパートがあり、それらがすべて整数に解析できること、およびそれらの値が一貫していることを確認します。しかし、それはただの楽しみのためです。実際に使用する必要がありますDateFormat

于 2013-03-05T03:42:17.750 に答える
-1

あなたがすでに持っているものに基づいて:

String regex = "([0-9]){4}+([-])?([0-1][0-2])+([-])?([0-2][0-9]|3[0-1])";
于 2013-03-05T03:54:41.450 に答える