2012-09-03 25 views
1

我目前需要註冊表達式來評估小數範圍。需要註冊表達式來查找小數範圍

的要求如下

1)可以讓點後只有1或2位小數或能以及允許全數字(例如)1234,123.4,1245.78有效

2)範圍應該在9999(例如)9999.0,9998.99,9999.00 - 有效| 9999.01,10000.00 - 無效

3)不需要開頭或結尾零

到目前爲止,我已經嘗試實現,直到寫這篇reg表達式

/^[0-9]\d{1,4}(\.\d{1,2})?$/.test(value); 

...但無法繼續進行設置範圍直到數字9999(因爲9999.01也無效)你能幫忙嗎?

+0

使用http://gskinner.com/RegExr/來測試你的正則表達式。它易於使用,不需要運行任何腳本:) – AdityaParab

+0

據我可以告訴(和測試),9999.01是一個很好的值,通過正則表達式。 –

+0

@webbandit - 這說9999.01是有效的,這是錯誤的 – user1458019

回答

0

這裏的東西快速和骯髒應該爲你工作:http://regex101.com/r/vK1jM3

/^(?(?=9999)9999(?:\.0+)?|\d{1,4}(?:\.\d{1,2})?)$/gm

我只是處理的9999

+0

嗨,當我使用上面的exp它說..無效的量詞..不知道什麼是問題 – user1458019

+0

唯一我能想到的是,JavaScript可能不支持條件語句... –

2

的特殊情況下,爲什麼不只是適用於正則表達式來確定是您的字符串一個有效的digit with dots浮點數,然後將它轉換爲數字並找到它是否大於9999。

正則表達式對於您的需求可能非常複雜,並且需要從客戶端獲取太多CPU。

0

這工作,據我可以看到:

^(9999(?!\.[1-9])(?!\.0[1-9])\.[0-9]{1,2}|9999|(?!9999)[0-9]{1,4}|(?!9999)[0-9]{1,4}\.[0-9]{1,2})$ 

測試出來:

var monstrosity = /^(9999(?!\.[1-9])(?!\.0[1-9])\.[0-9]{1,2}|9999|(?!9999)[0-9]{1,4}|(?!9999)[0-9]{1,4}\.[0-9]{1,2})$/; 

console.log(monstrosity.test("9999.00")); // true 
console.log(monstrosity.test("9999.01")); // false 
console.log(monstrosity.test("9999")); // true 
console.log(monstrosity.test("9998.4")); // true 
console.log(monstrosity.test("0")); // true 
console.log(monstrosity.test("0.5")); // true 

如果添加這樣的代碼庫,以後的維護程序員會追殺你拿着叉子。嘗試解決範圍檢查沒有正則表達式,因爲webbandit建議。

0

爲什麼是正則表達式?只要做

x > 0 && x <= 9999 && (x*100 - Math.floor(x*100) == 0) 
+0

對於指定的可接受值,此操作失敗。 – Deestan

+0

如果你指的是9999本身,我編輯答案使用'<='而不是'<'。 – 2012-09-03 13:41:56

+0

對不起,我一定喝醉了。無法看到它的任何問題。 – Deestan