2017-04-09 52 views
0

我试图使正则表达式满足上午或下午时间的标准。12小时时间验证涉及分号的Java正则表达式

我试过time.matches("[0-9]{2}:[0-9]{2}")但无论我输入什么时候都找不到它,例如20:00不匹配。 另外,如何在最后添加匹配的AM或PM(接受大写或小写)。

难道是这样的time.matches("[0-9]{2}:[0-9]{2}[am|pm]")

+1

'[am | pm]'应该是'(?:am | pm)'。此外,请张贴可复制的代码。 – Maroun

+0

@Henry oh woops mb,累了:D – user7404408

回答

3

为了验证一个12小时时间格式的正则表达式应该是

(1[012]|[1-9]):[0-5][0-9](\\s)?(?i)(am|pm)

1[012] - > 1后跟0 1或2,因为只有10个, 11,12允许次

[1-9] - 1>任何一个数字时至9

随后分号

[0-5][0-9] - >用于验证分钟。从00到59的任何内容都被接受。

(\\s)?忽略了时间和AM或PM

(?i)(am|pm)不区分大小写点之间的任何空白,下午验证

+0

'\\ s'周围的括号是不必要的,但+1 – Bohemian

+0

感谢您的解释! – user7404408

0
Pattern p = Pattern.compile("^[0-9]{2}:[0-9]{2}([a|p]m)?",Pattern.CASE_INSENSITIVE); 
    Matcher match = p.matcher("20:00PM"); 
    if (match.find()) 
     System.out.println(true); 
    else 
     System.out.println(false); 

您可以使用如下其它图案: “^ \ d \ d: \ d \ d([A | p] M)“?