私はこのように試しましたが、動作しませんが、値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;
}
私はこのように試しましたが、動作しませんが、値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;
}
正しい正規表現は次のようになります。
^([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)$
そのような数値範囲はできません。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 の値に関するコメントを確認してください...