2013-01-18 52 views
0

我有一个正则表达式来验证含有“HHMM”或字符串“HHMM,HHMM” 这是我在用的:正则表达式验证HHMM串

^[0-2][0-9][0-5][0-9],[0-2][0-9][0-5][0-9]$ 

这类作品在1247是确定3247不是。 同样1247,2200是好的,但1247,2290不是。

但是,为了允许24小时制时钟值,如2500不能被允许。 有没有一种方法来检查正则表达式,如果第一部分小时是2第二部分只能是0-4

+3

**不要重新发明车轮** ..有一些方法可以用来验证日期......您使用哪种语言! – Anirudha

+1

并请阅读您使用的标签说明。 –

回答

3

是,使用|0x1x箱子从2y分开:

^(?:[01][0-9]|2[0-4])[0-5][0-9],(?:[01][0-9]|2[0-4])[0-5][0-9]$ 

(?:...)创建一个非捕获组,限制运算符的范围。如果您确实想要捕获HH值(例如,稍后用某个替换项来替换它),请改为使用(...)

更新:在所有

(?:(?:[01][0-9]|2[0-3])[0-5][0-9]|2400) 

但是我认为这是更好地只是不允许任何24MM(包括2400):允许2400但避免像2411所有其它无效的时候可以用另一个|完成因为它确实应该写成00MM。在这种情况下,正则表达式只是变成:

^(?:[01][0-9]|2[0-3])[0-5][0-9],(?:[01][0-9]|2[0-3])[0-5][0-9]$ 
+0

谢谢,这有助于一点点。但只是发现像2411这样的值也是有效的,所以需要添加检查。 但我想0000 - 2359是足够好的,因为我怀疑任何人使用2400无论如何 –

+0

@恩运动,完全谢谢。更新了这两种情况的帖子。但0000-2359似乎是最好的选择。 –

+0

@ En-Motion - 不要忘记接受答案。这将有助于您在未来获得更多答案。 – JDB

0

你可以使用OR表达式中的正则表达式(2[0-4]|[01][0-9])

所以它看起来像^(?:2[0-4]|[01][0-9])[0-5][0-9],(?:2[0-4]|[01][0-9])[0-5][0-9]$

0

是,

^([0-1][0-9]|2[0-4])([0-5][0-9])(,([0-1][0-9]|2[0-4])([0-5][0-9]))?$ 

我希望它会为你工作。