【问题标题】:Regex validation for time entries时间条目的正则表达式验证
【发布时间】:2012-01-31 17:55:51
【问题描述】:

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

例如:

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

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

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

String timeStr = getTimeBoxValue();

【问题讨论】:

  • 你需要这个正则表达式:^(([0-9])|([0-1][0-9])|([2][0-3])):(([0-9])|([0-5][0-9]))$
  • @ash108:你能解释一下这个表达式是如何工作的吗?谢谢

标签: java regex validation


【解决方案1】:

有一个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();

  }
}

【讨论】:

  • 谢谢!我会检查你提供的链接! :)
  • @Vikky 我必须验证类似的格式。在我的情况下,我必须严格验证 hh:mm 的时间。因此,对于我的情况,应该验证 01:30,但不应该验证 1:30。我正在尝试掌握正则表达式,但感觉不够舒服。请您提供一些意见
【解决方案2】:

在 ash108:s 评论中也解释一下正则表达式:

^(([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 OR a(前 0-1 后 0-9 的数字)OR(前 2 后 0-3 的数字)

: 那么一定有一个:号

([0-9])|([0-5][0-9]) 则必须有一个数字 0-9 或 a(前 0-5 后 0-9 的数字)

$ 然后必须有字符串的结尾

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

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

现在,: 号之后的部分强制为两位数,而 : 号之前的部分可以为一位或两位。

【讨论】:

  • 如何给这个正则表达式增加长度?我知道它是 S{5} 或 w{5},但不确定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多