-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

你不能做这样的数字范围。要验证 1-24 (顺便说一下,00 有什么问题?以及从什么时候开始 60 在其他位置有效?)您需要像这样逐位进行:

(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 回答
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 回答