2015-09-15 28 views
-1

我有一個方法中,我嘗試驗證值和值可以是任何東西,但不應該是zero接受值大於零值甚至可以0.01或0.10

function change(){ 
    var bill= document.getElementById("myTextField") 
    var RE = /^(?!^0*$)(?!^0*\.0*$)^\d{1,2}(\.\d{1,2})?$/; 
    if(RE.test(bill)){ 
     alert("True"); 
    }else{ 
     alert("False"); 
    }  
} 

JSD FIDDLE DEMO

但即使我輸入正確的值,這將返回false。

the minimum value should be greater than 0 and maximum value is 99999.99 
+2

這是一個令人印象深刻的正則表達式,但爲什麼不只是將值轉換爲浮點數並測試它呢? – HeadCode

+0

@HeadCode你會舉一些例子嗎? – SAR

回答

1
function change(){ 
    var stBill = Math.round(document.getElementById("myTextField").value * 100)/ 100; 
    var RE = /^(?!^0*$)(?!^0*\.0*$)^\d{1,2}(\.\d{1,2})?$/; 
    if(RE.test(stBill)){ 
     alert("True"); 
    }else{ 
     alert("False"); 
    }  
} 

測試值不是元素,您選擇的元素不是它的淡水河谷

Demo Fiddle

+0

OMG!,我做了多麼愚蠢的錯誤,並且非常感謝這個...... – SAR

+0

我看不出爲什麼會這樣有效,它沒有任何意義..它說0.989如果大於0.99! – decebal

+0

@decebal我已更新答案和小提琴和應用四捨五入 – Rex

1

對照正則表達式,您無法測試輸入元素對象本身stBill。您需要測試它的值改爲:

RE.test(stBill.value) 
+0

OMG!,我做了多麼愚蠢的錯誤,並且非常感謝... – SAR

1

嘗試固定

RE.test(stBill.value) 

var stBill = document.getElementById("myTextField").value; 

你應該尋找價值而不是元素。 :)

1

從正確回答的人那裏得到了一些小題目,但將值轉換爲浮點數並測試它可能會更容易。

function change(){ 
    var stBill = document.getElementById("myTextField").value; 
    var num = parseFloat(stBill, 10); 
    if(num > 0 && num <= 99999.99){ 
     alert("True"); 
    }else{ 
     alert("False"); 
    } 
}