我正在执行以下编程练习:24小时的正则表达式验证。该语句是:
编写正则表达式以验证24小时时间字符串。查看示例以弄清楚应检查的内容:
接受:01:00-1:00
不接受:
24:00
您应该检查长度是否正确,没有空格。
我想问一下,为什么下面的正则表达式匹配24:00
public class RegexValidation {
public static boolean validateTime(String time) {
System.out.println("time: "+time);
return time.matches("(?:^[2])[0123]+:[0-5]+[0-9]|[0-9]+:[0-5]+[0-9]");
}
}
因为我以为它在表达:“如果字符串以2开头,那么它应该以[0-3](一个或多个)继续:[0-5]一个或多个和[0-9]。否则它以[ 0-9]一个或多个:[0-5]一个或多个和[0-9]。”
测试是:
import org.junit.Test;
import static org.junit.Assert.*;
public class RegexValidationTest {
@Test
public void test1() {
assertTrue(RegexValidation.validateTime("01:00"));
}
@Test
public void test2() {
assertTrue(RegexValidation.validateTime("1:00"));
}
@Test
public void test3() {
assertTrue(RegexValidation.validateTime("00:00"));
}
@Test
public void test4() {
assertFalse(RegexValidation.validateTime("13:1"));
}
@Test
public void test5() {
assertFalse(RegexValidation.validateTime("12:60"));
}
@Test
public void test6() {
assertFalse(RegexValidation.validateTime("24:00"));
}
}
另外,我编写了以下解决方案,该解决方案通过了测试:
public class RegexValidation {
public static boolean validateTime/*⌚*/(String time) {
if(time.matches("[\\d]+:[\\d]{2}")){
String[] times = time.split(":");
int hours = Integer.parseInt(times[0]);
int minutes = Integer.parseInt(times[1]);
return hours < 24 && minutes < 60;
}
return false;
}
}
我也读过:
Java中的条件正则表达式? https://www.regular-expressions.info/conditional.html 理解正则表达式if then语句 最后的问题是,为什么在第一个代码中正则表达式匹配24:00?
这是因为|现在。此后的替代方案[0-9]+匹配从1到9的任何数字,并中断所需的输出。
在下面的正则表达式应该工作,
^([01]\d|[0-9]|2[0-3]):?([0-5]\d)$
如果:不是可选的,请删除?
^([01]\d|[0-9]|2[0-3]):([0-5]\d)$
也已在上验证 jshell
jshell> var pattern = Pattern.compile("^([01]\\d|[0-9]|2[0-3]):?([0-5]\\d)$");
pattern ==> ^([01]\d|[0-9]|2[0-3]):?([0-5]\d)$
jshell> pattern.matcher("23:01").matches();
$2 ==> true
jshell> pattern.matcher("24:01").matches();
$3 ==> false
jshell> pattern.matcher("00:01").matches();
$4 ==> true
jshell> pattern.matcher("09:01").matches();
$5 ==> true
jshell> pattern.matcher("9:01").matches();
$6 ==> true
jshell> pattern.matcher("12:00").matches();
$7 ==> true
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。