时间条目的正则表达式验证

时间:2012-01-02 10:16:07

标签: java regex validation

我有一个文本框,它接受格式为HH:mm的时间,条目应该只有24小时格式。对于所有无效条目,应显示一条常见消息“无效条目”。

例如:

19:61 //INVALID
12:00am //INVALID
12***M //INVALID

06:00 //VALID
22:00 //VALID
5:45 //VALID

所需的代码是Java。 不熟悉正则表达式...所以需要你的想法.Thx提前! :)

String timeStr = getTimeBoxValue();

2 个答案:

答案 0 :(得分:5)

有一个Link 你可以使用哪个。

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

public class Time24HoursValidator{

  private Pattern pattern;
  private Matcher matcher;

  private static final String TIME24HOURS_PATTERN = 
             "([01]?[0-9]|2[0-3]):[0-5][0-9]";

  public Time24HoursValidator(){
      pattern = Pattern.compile(TIME24HOURS_PATTERN);
  }

  /**
   * Validate time in 24 hours format with regular expression
   * @param time time address for validation
   * @return true valid time fromat, false invalid time format
   */
  public boolean validate(final String time){

      matcher = pattern.matcher(time);
      return matcher.matches();

  }
}

答案 1 :(得分:1)

在ash108中解释正则表达式:评论:

^(([0-9])|([0-1][0-9])|([2][0-3])):(([0-9])|([0-5][0-9]))$
字符串开头的

^ ...

([0-9])|([0-1][0-9])|([2][0-3]) ...必须有一个数字0-9或a(数字用0-1然后是0-9)OR(一个数字用前2然后是0-3)

:然后必须有:符号

([0-9])|([0-5][0-9])那么必须有一个0-9或一个数字(数字首先是0-5然后是0-9)

$然后必须有字符串

的结尾

但是,如果你检查一下这个表达式有点奇怪。看看符号之后的部分。它将允许单个数字0-9。因此,例如12:5的字符串将是有效的。 Imo这个部分应该被删除导致:

^(([0-9])|([0-1][0-9])|([2][0-3])):([0-5][0-9])$

现在,符号后面的部分被强制为两位数,而符号前面的部分可以有一位或两位数。