Java,时间的正则表达式

Posted

技术标签:

【中文标题】Java,时间的正则表达式【英文标题】:Java, regular expression for time 【发布时间】:2018-05-28 12:29:17 【问题描述】:

我在 Java eclipse 界面中有一个文本字段,我想验证它是否只接受时间格式,但我不想包含秒数。

我如何验证它是否只接受这种格式 hh:mm,但从早上 8:00 到下午 16:00。

P.s TextField 变量名是txtOra。

【问题讨论】:

欢迎使用 Stack Overflow。我建议您take the tour 并阅读Help Center 以获取有关提出一个很好且广受欢迎的问题的信息。您在这里遗漏了几点。 您使用的是哪个图形框架?它是摇摆,awt,还是android?您确定是TextField 还是JTextField(这些不一样,解决方案可能取决于它)。 可能相关:docs.oracle.com/javase/tutorial/uiswing/components/…, docs.oracle.com/javase/8/docs/technotes/guides/swing/1.4/… Check this 模式:([8-9]|1[0-6]):([0-5][0-9]) 这个问题已经被问过很多次了,并得到了不同的回答。例如Regex pattern for EXACTLY HH:MM:SS time String. 【参考方案1】:

只需使用 DateTimeFormatter 解析它

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("H:mm");

LocalTime localTime = LocalTime.parse("16:16", dateTimeFormatter);

如果parse 没有抛出异常,则说明你有一个有效时间。

然后使用LocalDate#isAfterLocalDate#isBefore 检查您的约束

在此处查找更多模式https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

【讨论】:

我还会在解析后验证时间是否在给定范围内。【参考方案2】:

如果您使用java.time,则可以使用LocalTime,您可以使用isBeforeisAfter,如下所示:

public static boolean checkDateIsCorrect(String input)
    //Format your date
    LocalTime time = LocalTime.parse(input, DateTimeFormatter.ofPattern("H:mm"));
    //Then check if the time is between 8:00 and 16:00
    return !time.isBefore(LocalTime.parse("08:00")) 
                || !time.isBefore(LocalTime.parse("16:00"));

【讨论】:

H 单独可以接受 8 和 08(因此您不需要可选部分)。您的方法拒绝了 08:00 和 16:00 的时间限制,我怀疑这不是提问者的意图。 @OleV.V.我不明白 您的方法拒绝了 08:00 和 16:00 的时间限制,我怀疑这不是提问者的意图。 checkDateIsCorrect("8:00") 的预期结果是什么?实际结果是什么? "16:00" 的同样问题。 @OleV.V.我知道了,现在呢? 如果你想用那种方式解决,我想你需要 16:01。【参考方案3】:

使用以下函数验证具有 HH:MM(24 小时格式)的时间字符串

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public boolean validate(final String time)
      String TIME24HOURS_PATTERN = 
                "([01]?[0-9]|2[0-3]):[0-5][0-9]";
      Pattern pattern = Pattern.compile(TIME24HOURS_PATTERN);
      Matcher matcher = pattern.matcher(time);
      return matcher.matches();


【讨论】:

你会如何扩展它以包括秒? "([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]" ? @ennth,你给出的解决方案应该能用秒

以上是关于Java,时间的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

java正则表达式的使用

JAVA正则表达式

如何将 javascript 正则表达式转换为安全的 Java 正则表达式?

java正则表达式

java 正则表达式

java匹配url的正则表达式