【发布时间】:2021-02-24 01:26:56
【问题描述】:
我需要对我的项目的输入进行严格验证,时间格式为 HH:MM am/pm。到目前为止,我已经有了这个 RegEx 表达式:
(1[012]|[1-9]):[0-5][0-9](\\s)?(?i)(am|pm)
上面的表达式工作正常,但是当我通过上午 9:05 时它不工作,当我通过上午 9:05 时它工作
有人可以建议我如何解决这个问题。
代码
public class SampleClass {
public static void main(String[] args) {
String inputTimeString = "09:05 PM";
boolean isValidaTim = isValidTime(inputTimeString);
if (isValidaTim) {
System.out.println("Valid time string: " + inputTimeString);
} else {
System.out.println("Invalid time string: " + inputTimeString);
}
}
public static boolean isValidTime(String time) {
String regexPattern = "(1[012]|[1-9]):" + "[0-5][0-9](\\s)" + "?(?i)(am|pm)";
Pattern compiledPattern = Pattern.compile(regexPattern);
if (time == null) {
return false;
}
Matcher m = compiledPattern.matcher(time);
return m.matches();
}
}
【问题讨论】:
-
必须使用正则表达式吗?
-
没有强制使用。我想要工作代码
-
所以需要使用正则表达式??或者你可以使用 LocalTime 吗?
-
仅用于匹配,您不需要捕获组。你必须添加一个可选的零来匹配
09,你可以使用一个字符类作为上午下午部分(?:1[012]|0?[1-9]):[0-5][0-9]\\h?(?i)[ap]m见regex101.com/r/0ien3M/1 -
正则表达式在这里是多余的。查看Answer by Ole V.V.中显示的java.time类的使用
标签: java regex time-format