开发者社区> 问答> 正文

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

我正在执行以下编程练习: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?

展开
收起
几许相思几点泪 2019-12-29 19:42:14 1324 0
1 条回答
写回答
取消 提交回答
  • 这是因为|现在。此后的替代方案[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
    
    2019-12-29 19:42:40
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载