2012-08-06 32 views
-2

可能重複:
Decimal or numeric values in regular expression validation基本數字和小數點的正則表達式?

我希望創建一個正則表達式來檢查輸入的號碼。這個數字:

  1. 必須爲正數
  2. 可以有很多數字
  3. 可以有很多時間,但沒有連續的小數點
  4. 可與過0
  5. 不能帶小數點導致點

例如:

有效輸入S:

  1. 321.99.45.6
  2. 1.2
  3. 0.1

無效輸入:

  1. 33..4
  2. -1.0
  3. 0.225

謝謝

+4

[你嘗試過什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried /) – 2012-08-06 16:04:47

回答

3

你應該做這樣的事情

^(?:\d+\.)*\d+$

它只是匹配至少一個數字,然後按小數點但很多時候它需要的模式,同時確保數字以數字結尾。

+1

爲什麼雙「+」? – 2012-08-06 16:15:56

+0

double plus只是一個優化,所以正則表達式引擎知道它不會回溯,它只是讓它快得多:) – 2012-08-06 16:17:41

+1

雖然在這種情況下並不是必須的,因爲點是強制性的,所以沒有什麼可以回溯到。在@ JosephSilber現在已經刪除的解決方案中,有必要避免災難性回溯的風險。 – 2012-08-06 16:18:42

2

這是我可以爲這個問題提出的最簡潔的正則表達式。 (例如0.1415)

^(?:\.?\d)+$ 
+0

有沒有辦法將總體數字限制在8位,包括小數位? – rajakvk 2014-01-22 15:21:56

+1

請嘗試以下操作:^(?:\。?\ d){8} $ – davidrac 2014-01-23 14:49:26

+0

非常感謝。它完美地工作。爲了允許少於8位數字,還調整了一點^(?:\。?\ d){0,8} $ – rajakvk 2014-01-24 13:39:37

1

你爲什麼不看在編程語言的BNF範式,如C:如果你想允許小數點開頭這也應該工作?

這表明你對任何形式的數字的正則表達式...