我有一个文本框,它接受格式为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();
答案 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])$
现在,符号后面的部分被强制为两位数,而符号前面的部分可以有一位或两位数。