2012-10-14 84 views
0

這是我的用於驗證,可能是1和4之間的字符長(H代表小時和M代表分鐘)的字符串要求:JavaScript的正則表達式來驗證可變長度時間

1字符= H(間位0-9)

2個字符= HH(第一H是0-2之間的數字,第二個是0-9之間的數字,但是,如果第一個是2第二個只能是0-4)

3個字符= HMM(第一個H是0-9之間的數字,第一個M是0-5之間的數字,第二個M是0-9之間的數字)

4個字符= HHMM(第一個H是0-2之間的數字,第二個是0-9之間的數字,但是如果第一個是2,第二個只能是0-4,第一個M是0-5之間的數字,第二個M是0-9之間的數字)

是什麼讓這個具有挑戰性是,我不知道字符串的長度事先和相同的數字可能意味着不同的事情取決於字符串是多久。任何關於JavaScript RegularExpression的想法來驗證這一點?

+0

如果你願意,你可以用'str.length'來得到字符串的長度。另外,將多個表達式組合成一個表達式並不是特別困難:http://www.regular-expressions.info/alternation.html。我會從那裏開始,然後重構表達式以避免重複。 –

+0

字符串從哪裏來,你不知道它的長度? –

+0

看看[正則表達式來驗證有效時間](http://stackoverflow.com/questions/884848/regular-expression-to-validate-valid-time)。 –

回答

1

您可以使用正則表達式是這樣的:

^(2[0-4]|[01]?\d)([0-5]\d)?$ 

擊穿:

^     beginning of string 
2[0-4]    digit 2 followed by digit 0-4 
|     or 
[01]?\d    digit 0-1, optional, followed by any digit 
([0-5]\d)?   digit 0-5 followed by any digit, as whole optional 
$     end of string 

注:也許你的意思是有0-23個小時,而不是0-24:

^(2[0-3]|[01]?\d)([0-5]\d)?$ 
+0

對於'9'和'215',這兩個問題都是有效的。我認爲它應該是'^(\ d | 2 [0-4] | [01] \ d)([0-5] \ d)?$' – Bill

+0

對,用戶可以輸入9,應該被解釋爲09小時。我認爲比爾是對的,但古法非常接近(是的,應該是0-23小時)。感謝你們倆! – lukegf

+0

@ Bill:好的,謝謝你的發現。 '[01]'應該是可選的,以允許單位數字的小時。 – Guffa