2015-05-26 43 views
6

使用regex的總長度,我可以檢查它是否是十進制或不檢查十進制和數量

^\d*\.?\d*$ 

但我想控制是這些數字的總長度。

(^\d*\.?\d*$){1,10} 

但我仍然無法控制它。

後2天之後,我最終solution

(?=^\d*\.?\d*$)^.{1,10}$ 

Regular expression visualization

Debuggex Demo

+1

刪除'*''後\ D'。 – Maroun

+0

你使用什麼引擎/語言?對於一些引擎的簡單正則表達式來說,這並不容易。 –

+0

我使用C#@DenysSéguret –

回答

5

這裏有一個解決方案:

^(?!.{10})\d*\.?\d*$ 

這將檢查的整個數量不超過10個字符。

如果要檢查整個數不超過10 (不計點),你可以使用

^((?!.{11})\d*\.\d*|(?!.{10})\d*)$ 
+0

Seguret爲你的偉大建議+1票,它對我有很大的幫助。但是我仍然有疑問,如果我想限制10位數字,我必須使'^(?!。{11})\ d * \。 ?\ d * $',如果我想要11位數的限制,我必須使'.. {12} ..'。那麼還有其他方法嗎?非常感謝你 –

+0

@FrankMyatThu我的編輯是否回答你的問題? –

2
(^\d*\.?\d*$){1,10} 
    ↑  ↑ 

*手段,零個或多個。所以你的正則表達式意味着「零次或多次,從1到10次」,所以在這種情況下{1,10}是多餘的。您需要刪除*或將{1,10}僅應用於沒有它的零件。

例如,您可以將您的正則表達式更改爲:

^\d*(\.?\d{0,10})$ 

此相匹配的是有多達點後10位數字。如果要匹配10個位數的總浮點數,你也可以使用負前瞻(如@DenysSéguret已經在他的回答中提到+1):

(?!.{10})\d*\.?\d* 

它匹配\d*\.?\d*$,只有當它的長度< 10 (包括點)。

+1

這是接受超過10的長度。 – Manwal

+0

@Manwal編輯。 – Maroun