2013-02-20 62 views
1

我怎樣才能創建一個數字的正則表達式用小數點分隔符,但也限制了長正則表達式數字與長

我創建這個:

^[0-9]([0-9]*[.]?[0-9]){1,10}$ 

然後1234567890.1234567890是有效的,但使用20(+ 1 - >小數點分隔符)字符。

我該如何限制爲10個字符?

有效期:

1234567890 
123456789.0 
12345678.90 
1234567.890 
123456.7890 
12345.67890 
12345.67890 
1234.567890 
123.4567890 
12.34567890 
1.234567890 

無效:

12345678901 
12345678901. 
123456789.01 
12345678.901 
1234567.8901 
123456.78901 
12345.678901 
12345.678901 
1234.5678901 
123.45678901 
12.345678901 
1.2345678901 
.12345678901 

在此先感謝

+1

老實說,我會只要檢查一下它是否匹配'/^\ d +(?:\。\ d *)$ /',然後是's /\.//;'並檢查長度。 – 2013-02-20 22:17:31

+0

「.123」或「123.」應該是有效的匹配嗎?另外,我猜測指數表示法是不允許的? – 2013-02-20 22:26:46

+0

@LoneShepherd最好的選擇是你說的,但是一個動態的形式,我也需要控制長度。 – Equiman 2013-02-21 13:32:47

回答

4
^(?:\d{1,10}|(?!.{12})\d+\.\d+)$ 

說明:

^   # Start of string 
(?:  # Either match... 
\d{1,10} # an integer (up to 10 digits) 
|   # or 
(?!.{12}) # (as long as the length is not 12 characters or more) 
\d+\.\d+ # a floating point number 
)   # End of alternation 
$   # End of string 

請注意,(在你的例子中).123123.無效。

+0

+1使用花哨lookahead斷言得到一個正則表達式:-) – Cameron 2013-02-20 22:26:17

+0

@TimPietzker工作就像一個魅力...謝謝!我會稍微改變它'^(?:[0-9] {1,10} |(?!。{12})[0-9] + [。] [0-9] +)$'因爲在C#中遇到\字符問題 – Equiman 2013-02-21 13:43:20

+0

Finaly .Net以這種方式完美工作。謝謝! – Equiman 2013-02-25 20:36:05

1

如果你不使用正則表達式來計算長度,它會更加清晰,甚至更快。根據^\d+(?:\.\d+)$進行測試,取出點並取長度。

如果你真的需要它是一個正則表達式,你可以使用lookahead來檢查格式分別長度:

^\d{1,10}$|^(?=.{11}$)\d+\.\d+$ 

說明:

^   # At the start of the string 
(?:  # either 
\d{1,10} # up to 10 digits 
|   # or 
(?=  # from here 
    .{11} # 11 characters 
    $  # to the end 
)   # and as well 
\d+\.\d+ # two dot-separated digit sequences 
)   # 
$   # 
+0

謝謝!該解決方案需要全部10位數字。我將它改爲:'^ \ d {1,10} $ | ^(?=。{1,11} $)\ d + \。\ d + $'允許1至10位數的變化。 – Equiman 2013-02-21 13:37:11

+1

也許我沒有在我的例子中說明這一點。 – Equiman 2013-02-21 13:46:40

+0

是的,我不清楚。我已經調整了答案。 – Bergi 2013-02-21 13:50:17