gpt4 book ai didi

Java条件正则表达式检查24小时时间?‽

转载 作者:行者123 更新时间:2023-12-02 03:13:38 25 4
gpt4 key购买 nike

我正在做以下编程练习:regex validation of 24 hours time.声明如下:

Write a regex to validate a 24 hours time string. See examples to figure out what you should check for:

Accepted: 01:00 - 1:00

Not accepted:

24:00

You should check for correct length and no spaces.

我想问一下,为什么下面的正则表达式,匹配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;
}
}

我还读过:

最后的问题是,为什么在第一个代码中正则表达式匹配 24:00?‽

最佳答案

这是因为 | 的存在。此后的替代方案 [0-9]+ 匹配从 1 到 9 的任何数字,并中断所需的输出。

following regex应该可以工作,

^([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

关于Java条件正则表达式检查24小时时间?‽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59518066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com