2017-03-09 62 views
0

我試圖在JavaScript中應用正則表達式,允許用戶輸入最小1和最大999999的ammount,如果用戶想要在小數點輸入ammount,它將允許用戶輸入十進制高達2.正則表達式範圍1-999999和精度高達2小數位

以下的精度與它們各自的結果輸入

100: Pass 
999999: Pass 
100.23: Pass 
100.2: Pass 
100.234: Fail 

這是我迄今^([1-9][0-9]{0,2}|999999)$)試過了,這讓我內1-999999輸入金額,但我也想處理十進制的情況。

+5

用正則表達式的所有檢查的數值範圍首先通常皺眉更容易維護。您目前的正則表達式不會像您所說的那樣執行,例如它會在'1000'上失敗。 '999999.99'是否有效? –

+0

@WiktorStribiżew如果這是一個答案,請將它發佈爲答案... – evolutionxbox

+7

爲什麼在簡單檢查('number> = 0 && number <= 999999')時使用正則表達式會做同樣的事情,但更多容易(和清楚)? –

回答

1

也許這可能是工作?:

^[1-9]\d{0,5}(?:\.\d{1,2})?$

2

我建議在邏輯上這樣做;

[0, 0.75, 100, 999999, 999999.75, 100.23, 100.2, 100.234].forEach(i => { 
 
    var inRange = i >= 1 && i <= 999999; // check whether in range 1-999999 
 
    var inPrecisionRange = i * 100 % 1 == 0; //check whether has at most 2 dec. point 
 
    console.log(i + " -> " + (inRange && inPrecisionRange)); 
 
});

簡單得多,更容易閱讀和遠遠超過正則表達式IMO

+1

使用'> = 1'會更好;如果輸入= 0.55,它在你的範圍內,但不在1-99 ..。 – MohaMad