2013-07-30 66 views
1

我創建了一個Regexp來驗證-359和+359(帶有可選符號)之間的方向角度。這是我的正則表達式:添加兩位十進制數字到數字範圍正則表達式

const QString xWindDirectionPattern("[+-]{0,1}([0-9]{1,2}|[12][0-9]{2}|3[0-5][0-9])"); 

現在,我想補充的兩個十進制數,以寫數字從-359.99至359.99。我試過類似追加\。[0-9] {1,2} | [0-9] {1,3}但它不起作用。

我想有可選的小數點,所以我可以有

23.3 valid 
23.33 valid 
23  valid 
23.333 not valid 

我讀過一些其他的問題,比如this one,但我不能修改這個例子來匹配號碼範圍,就像我的情況一樣。 我怎樣才能達到這個結果?

在此先感謝您的答覆。

這怎麼能實現呢?

回答

1

你可以這樣做:

[+-]{0,1}((?:[0-9]{1,2}|[12][0-9]{2}|3[0-5][0-9])(?:\.[0-9]{1,2})?) 

這將允許後面跟着一個或兩個數字的小數點。你可能也想用開始和結束錨(^/$),以確保沒有比你的字符串—沒有這個這種模式其他字符,23.333將被允許的,因爲23.33上述模式匹配:

^[+-]{0,1}((?:[0-9]{1,2}|[12][0-9]{2}|3[0-5][0-9])(?:\.[0-9]{1,2})?)$ 

你可以測試一下here

+0

我可以寫359.88,但我也可以寫,例如6334,但在這種情況下不允許有小數點。 – Jepessen

+0

@Jepessen我認爲整個想法是支持-359.99到359.99之間的範圍。爲什麼要允許6334? –

+0

Infact我說我可以寫6334,但我不應該被允許。 – Jepessen

2

我創建了一個正則表達式以度來驗證方向,-359和+359

號之間,你不能。你不應該。您正在使用錯誤的工具。正則表達式不能進行各種驗證,這就需要挖掘字符的語義。

正則表達式只能處理和匹配文本,但不能識別它們實際上的含義。基本上,正則表達式對解析常規語言很有好處,對幾乎所有其他語言都不好。

對於例如爲:

  • 一個正則表達式可以匹配3個數字,但它是非常不切實際的,用它來搭配3位落於範圍 - [259, 634]。爲此,您需要知道該號碼中每個單獨數字的含義。
  • 正則表達式可以匹配日期的模式,如\d\d/\d\d/\d\d,但它不能識別哪個部分是date,哪個部分是month
  • 同樣,它可以找到你兩個號碼xy,但它不能識別,是否x < y或不。

上述任務要求您瞭解文本的含義。正則表達式不能這樣做

嗯,當然,你也來了肯定的正則表達式,但你可以看到它是高度非彈性。你的需求有一點改變,會使兩者都受到影響 - 正則表達式和你。

你應該更好地運用相應的語言功能 - 結構,如if-else,以確保你正在閱讀度在該範圍內,而不是正則表達式。

+0

我插入後驗證數字,但我想這樣做,因爲我有一個網格單元格,我必須把這個值,我必須創建一個驗證程序,以避免用戶在寫入時寫入錯誤的數據,如插入字母或放置無效值。我認爲regexp是一個很好的工具,但也許你可以提出更好的建議? – Jepessen

+0

@Jepessen。那麼,可以通過正則表達式進行某種驗證,例如,測試用戶沒有任何字母表,只需要數字,或字段應該以特定字母開頭,只包含給定集合中的字符,以及應該具有指定的長度。但是,像我說的一些驗證,以確定一個數字的範圍是無法完成的。你應該使用適當的語言結構。順便說一句,你在用什麼語言? –

+0

另請參見[this](http://programmers.stackexchange.com/q/113237/66382)和[this](http://stackoverflow.com/q/7553722/1679863)文章。 –

1

嘗試[+-]?([1-9]\d?|[12]\d{2}|3[0-5]\d)(\.\d{1,2})?

[+-]?   Optional Sign 
[1-9]\d?  1 or 2 digit number 
[12]\d{2}  100 to 299 
3[0-5]\d  300 to 359 
(\.\d{1,2})? Optional decimal point followed by 1 or two digits 
+0

它似乎沒有工作。我可以寫1,12,2,但不是2.4,200 ecc – Jepessen

+0

您是否嘗試用'^'和'$'來錨定正則表達式? – Phylogenesis

+0

是的,我也試過了。 – Jepessen

相關問題