2010-09-08 128 views
0

我有一個問題:我應該匹配值從0.0到一個特定的double值(例如,我應該匹配從0.0到150.00,包括值爲12,21.23213,149.111 )正則表達式匹配從0.0到150.0(包括浮點數)

任何人都可以幫助我嗎?

我嘗試了一切。

我用這個正則表達式匹配得分由0.0至60.0,但它並沒有提前上班

(^0(\.[0-9]+)?$|^[1-9]{1}(\.[0-9]+)?$|^[1-5]{1}[0-9]{1}(\.[0-9]+)?$|^60$) 

與123不工作

謝謝

馬爾科

+10

爲什麼不把它變成一個浮點數並檢查它的數值? – BoltClock 2010-09-08 13:01:23

+6

請爲上帝的愛而不要使用REGEX! AAAAAAGH! – 2010-09-08 13:03:20

+2

喝點水,@約翰。 – BoltClock 2010-09-08 13:04:18

回答

14

請勿使用正則表達式 - 使用Number,請檢查它是否爲isNaN,然後使用<=和來比較值。

例如

var your_val = "3.05"; 
var your_val_num = Number(your_val); 
if (!isNaN(your_val_num) && your_val_num >= 0 && your_val_num <= 150) { 
    // do something 
} 

N.B.根據AndyE的評論,我改變了我的答案,使用Number而不是parseFloat,並在根據林可克的評論進行數字比較之前檢查NaN

+1

+1,但我會使用'+'或* Number()*而不是* parseFloat()*,它將在* if *語句中解析類似「149.5grams」的* 149 *並返回* true *。 – 2010-09-08 13:17:12

+0

應該在那裏打電話給'isNan'嗎? – lincolnk 2010-09-08 13:31:37

+1

@Andy E,@lincolnk - 謝謝,編輯。 – 2010-09-08 14:23:50

3

忘記正則表達式 - 只是檢查(parseFloat(x)= & parseFloat(x)> = 0)

8

我同意其他答案:正則表達式是做數字比較差的方式。

如果你真的到,無論是:

  • ,因爲你堅持一個愚蠢的框架只允許正則表達式檢查,或
  • 你需要額外的小數精度是JavaScript數字不能提供(如JavaScript有沒有內置的十進制型)......這不會是這樣針對整個數字0和150雖然

然後比較:

0 (加入新行/評論的可讀性,取出使用。)
^0*(     // leading zeroes 
150(\.0+)?|    // either exactly 150 
1[0-4]\d(\.\d+)?|  // or 100-149.9* 
\d{0,2}(\.\d+)?   // or 0-99.9* 
)$ 

這不支持E-符號(150 = 1.5E2),但除此之外,允許什麼正常JS數字分析會。