2011-01-31 181 views
2

我正在尋找一個正則表達式,它將驗證從0開始的數字 - 並且可能包含小數。正則表達式,找到數字,0或十進制

有什麼想法?

+2

有點模糊的問題,國際海事組織。嚴格來說,十進制數字是用十進制數表示的數字,而我想你實際上是指小數部分(帶有「。」或「,」)。你能否澄清並舉幾個有效和無效字符串的例子? – 2011-01-31 13:30:11

回答

2

一個簡單的正則表達式來驗證數字將匹配:

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

這應該適用於具有可選的前導零的數字,帶有可選的單點和多位數。

  • ^...$ - 匹配從開始到所述串的端部(將不會驗證ab12.4c
  • \d+ - 至少有一個數位。
  • (...)? - 可選組...
  • \.\d+ - 字面點和一個或多個數字。
0

這應該做你想要什麼:

​​3210

它會匹配任何數量從0開始,然後任意數量的,也許,或。和任何數字

+0

這將允許0.0.0.5等 – 2011-01-31 13:25:36

+0

這與'0 ........ ,,,,,,,,, .........`匹配,只是命名一個無效數字。 – 2011-01-31 13:25:40

+0

這個似乎不喜歡0 – user398341 2011-01-31 13:26:57

0

我總是用RegExr來建立我的正則表達式。這是一種拖放,並有你的正則表達式和結果的實時預覽。

它會看起來像^ 0,0-9] *

-1
'/^([0-9\.]+)$/' 

如果測試字符串是一個正十進制數

0
^[0-9]+(\.[0-9]+)?$ 

請注意,這個表達式0.1將是有效的,但0.1不會。

1

由於小數可能會或可能不會對他們有一個小數點,可能會或可能不會有一個小數點前的數字,如果他們有一些事後,可能會或可能不會有位以下是小數點如果他們有一些它之前,你必須使用此:

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

這通常是更好的寫:

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

米UCH更好地寫着:

(?x) 
^      # anchor to start of string 
(?:      # EITHER 
    \d+ (?: \. \d*)? # some digits, then optionally a decimal point following by optional digits 
    |      # OR ELSE 
    \d*  \. \d+  # optional digits followed then a decimal point and more digits 
)      # END ALTERNATIVES 
$      # anchor to end of string 

如果您正則表達式編譯器不支持\d,或者也可以根據您的正則表達式引擎如何支持Unicode的是,如果你應該更喜歡與Unicode的Decimal_Number只匹配ASCII數字,而不是什麼財產(快捷方式Nd) - 也就是Numeric_Type=Decimal財產的任何東西 - 那麼您可能希望在[0-9]之間交換以上所有使用\d的實例。

相關問題