2012-02-11 180 views
1

我需要验证包含时间的文本框条目。正则表达式HHmm验证 - Java

时间应采用HH:mm格式和24小时格式。

对于如:

09:00, 21:00, 00:00, etc., 

无效的条目:

2534, 090, *7&**, etc., 

如果输入的时间是小时,分钟,那么我就需要追加 ':' 的条目。

对于e.g:

If textBox entry= 0930, it should be changed to 09:30 

这是我到目前为止有:

String textBoxVal = getTextBoxValue(); 
String colonCheck = ":"; 

if (!textBoxVal.contains(colonCheck)){ 
textBoxVal = textBoxVal.substring(0,2) + ":" + textBoxVal.substring(2,4); 
} 

但由于是显而易见的,这个代码是不会对所有情况下工作。

我对正则表达式并不是很熟悉,所以在Java中使用正则表达式可以实现的任何帮助将会很有帮助!谢谢!

+2

我建议你不要使用RegEx来处理这个任务。使用Java提供的任何类进行验证。我认为你正在寻找的课程是'DateFormat'。见'parse'方法。 http://docs.oracle.com/javase/6/docs/api/java/text/DateFormat.html – 2012-02-11 17:11:29

+0

@RanhiruCooray Thankyou! – user656523 2012-02-11 18:09:50

回答

6

解决方案使用日期格式,如指向的Ranhiru

String theTime = "23:55"; 

    SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm"); //HH = 24h format 
    dateFormat.setLenient(false); //this will not enable 25:67 for example 
    try { 
     System.out.println(dateFormat.parse(theTime)); 
    } catch (ParseException e) { 
     throw new RuntimeException("Invalid time "+theTime, e); 
    } 
+0

我现在就试试看,并告诉你它是否有效。 :) – user656523 2012-02-11 17:31:24

+0

这个伎俩!谢谢! :D – user656523 2012-02-11 18:07:23

+0

@rogelware如果用户输入22:45&或23:23(等 – bluelurker 2014-12-12 08:40:56

3

下面将做的伎俩为您

str = str.replaceAll("([01][0-9]|[2][0-3]):?([0-5]\d)", "$1:$2"); 

这将改变2300至23:00和23:00离开原样。

您也可以使用(?:[01][0-9]|[2][0-3]):?[0-5]\d仅用于验证。

只是进一步的说明 - 即使这一个伎俩,如果它是日期验证你想要的,那么我会去DateFormat路线。

+0

),验证失败。谢谢Stefan.But在我的情况下,24:00或2400碰巧也是一个无效的输入。是00:00 – user656523 2012-02-11 17:30:11

+0

哦,我错过了,对不起队友..我会编辑我的表情,这是一个简单的修复 – 2012-02-11 17:31:08

+0

@rogelware比我快:)干杯伙计 – 2012-02-11 17:32:06

0
//Assuming text to match is in var mytext 
var re=new RegExp(/^(\d\d):{0,1}(\d\d)$/); 
var match=re.exec(mytext); 
if (!match) alert("Bad value!"); 
else mytext=match[1]+':'+match[2]; 
+0

-1:Java,而不是Javascript溶剂。这种溶剂不会检查25:34作为无效输入。 – 2012-02-11 17:24:53

+0

啊 - 我误解了这个问题:不是JavaScript,而是Java ......好吧,狗屎会发生。 – 2012-02-11 17:26:03