2011-01-10 147 views
-1

我需要一個匹配0到99.999之間數字的正則表達式(99,999也是有效的)。用於匹配數字的正則表達式0-99.999

有效例子:

1,1 
99.9 
12.876 
1,777 

無效的例子:

9837,83 
-12,24 
11.1112 
+4

我不明白你的要求。你說它應該從0開始,以99.999或99,999結束?但你的例子沒有顯示這一點。你能否通過分開行來使你的例子更加清晰。 – 2011-01-10 14:10:50

+0

另外,你在哪個開發環境中工作? – 2011-01-10 14:11:17

+0

@ElRonnoco:我幾乎可以看到「0-99.999之間的數字」(並使用[十進制逗號](http://en.wikipedia.org/wiki/Decimal_mark#Countries_using_Arabic_numerals_with_decimal_comma))。 – 2011-01-10 14:14:08

回答

1

將這項工作?

[0-9]{1,2}[.,][0-9]{1,3} 

此匹配類似的東西這樣的:

  • 0.0/01,1
  • 99,999/09.009

但不是這樣的東西:

  • .0/,1/1/01
  • 099,999/09.0090

希望它幫助。

2
^\d{1,2}(?:[.,]\d{1,3})?$ 

應該做的。

說明:

^   # anchor the match at the start of the string 
\d{1,2} # match one or two digits 
(?:  # optionally match the following group: 
[.,]  # a . or , 
\d{1,3} # 1-3 digits 
)?  # end of optional group 
$   # anchor the match the end of the string 
2

如果你想查一個號碼是你不應該使用正則表達式在一定範圍內,它是太遠的你在做什麼邏輯,很難去除調試。我會首先用小數點替換逗號。然後檢查範圍。

如(JavaScript)的

function isValid(inputString) 
{ 
    var number=parseFloat(inputString.replace(',','.')); 
    return (number>=0 && number <=99.999); 
} 

更新回答

上述解決方案沒有考慮業務方案的要求,具有精度不超過3位小數。

function isValid(inputString){ 
    var number=parseFloat(inputString.replace(',','.')); 
    validPrecision = true; 
    if (inputString.split('.')[1]) { 
     validPrecision=inputString.split('.')[1].length<=3;} 
    return (number>=0 && number <=99.999 && validPrecision); 
}; 
1

下面的工作:

^\d{1,2}((,|.)\d{1,3})?$