-1

私はこのように試しましたが、動作しませんが、値005959形式のHHMMSSでは動作しません

if(Pattern.matches("^([0-23])([0-59])([0-59])$", value))
{
    SimpleDateFormat dformat = new SimpleDateFormat("HHMMSS");
    dformat.setLenient(false);
    dformat.parse(value);
    return true;
}
4

2 に答える 2

1

正しい正規表現は次のようになります。

^([01]\d|2[0-3])[0-5]\d[0-5]\d$

コメントですでに述べたように、60は有効な分でも秒でもありません。また、24は有効な時間ではありません。

時間は1から24に、分は1から60になる世界では、次を使用する必要があります。

^(0[1-9]|1\d|2[0-4])(0[1-9]|[1-5]\d|60)(0[1-9]|[1-5]\d|60)$
于 2013-01-28T10:48:56.410 に答える
1

そのような数値範囲はできません。1 ~ 24 を検証するには (ちなみに 00 の何が問題なのか? 他の位置で 60 が有効だったのはいつから?)、次のように 1 桁ずつ行う必要があります。

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

つまり、最初の桁が 0 の場合、1 ~ 9 が続く必要があります。1 の場合、任意のものが続くことができます。2 の場合、0 ~ 4 が続く必要があります。しかし、とにかくこれに正規表現を使用するのはなぜですか? 略さずに:

^(0[1-9]|1[0-9]|2[0-4])(0[1-9]|[1-5][0-9]|60)(0[1-9]|[1-5][0-9]|60)$

それでも、0 と 60 の値に関するコメントを確認してください...

于 2013-01-28T10:46:54.183 に答える