2011-04-03 119 views
0

我正在尋找一個正則表達式來驗證從046R到120R的任何字符串。正則表達式來驗證字母數字連續字符串

聽起來很簡單,但我在這裏錯過了一些東西。 這是我有:

^04[6-9]R|0[5-9][0-9]R|10[0-9]R|11[0-9]R|120R +$ 

但它不拿起120R作爲一個有效的字符串爲好。這個表達可以簡化嗎?

在此先感謝。

+2

爲什麼在120R之後有'+'(僅)?這意味着當你有120R時,它必須至少有一個空格。 – sawa 2011-04-03 21:13:02

+0

'10 [0-9] R | 11 [0-9] R'_1'01 [0-9] R'。 – 2011-04-03 21:16:20

回答

2

刪除最後的 +。否則,需要驗證字符串120R後需要一個或多個空格。

此外,|具有非常低的優先級。 ^$應該停留在包含|的組之外。

^(?:04[6-9]|0[5-9][0-9]|1[01][0-9]|120)R\s*$ 
+0

打敗我吧。還有一件事,如果你希望允許尾隨空格,你可以使用'*'(零或多個)而不是'+'(一個或多個):'^(...)R * $'乾杯! – 2011-04-03 21:18:03

+0

這沒有解決。它不接受它應該的一些價值。看看:[鏈接] http://www.rubular.com/r/YZsPIRInNV – Bruno 2011-04-04 00:57:44

+0

@布魯諾:這是因爲你的測試案例不是「乾淨」 - 一些條目包含不必要的尾部空間。這可以通過像Xavier的評論那樣在末尾添加'\ s *'來解決。請參閱http://www.rubular.com/r/3prIDsOncr – kennytm 2011-04-04 05:19:58

1

您可以通過使用負向預測排除某些匹配,並簡化正則表達式。

^(?!0[0-3])(?!04[0-5])[01]\d\dR$ 
相關問題