2014-01-09 72 views
7

如何在jQuery中驗證金額,我可以輸入的最大金額是9999.99 所以我的要求是: 1.it應該只允許數字和一個點 2.max長度爲7(包括點) 3.before點的最大長度爲4 4.after點的最大長度爲2如何在jquery中驗證金錢

目前我的文本框只允許數字和一個點用下面的代碼

$('#txtpaymentamnt, #txttenderamt').on("keypress", function (e) { 
    alert(e.which); 
    if (e.which != 8 && e.which != 0 && ((e.which < 48 || e.which > 57) && e.which != 46)) { 
     e.preventDefault(); 
    } 
+0

你需要在檢查輸入值事件(例如,按鈕點擊)還是防止輸入錯誤的數據? – siniy

+0

文本框離開事件或防止輸入錯誤的數據(但應彈出一條消息,說明最大值爲9999.99) – Santosh

+0

如果您使用的是html5,您可以使用並使用min和max屬性 –

回答

13

你可以做到這一點正則表達式:/^\d{0,4}(\.\d{0,2})?$/

編輯:

這裏的要求fiddle

+0

不工作...我可以有jsfiddle – Santosh

+0

我更新了正則表達式並添加了一個小提琴。 –

+0

謝謝傑克澤利格...它爲我工作,但需要改變不接受字母 – Santosh

0

如果我是你,我會使用the isNumeric function in this answer檢查,如果輸入的是一個數字,然後檢查數的有效期爲你的情況。

爲了已經「有效數量」(根據您的要求),它具有:

  • 0和9999.99(點前最多4個位數)之間可以。

  • 最多有2個十進制數字。檢查是否在第n個數字(在你的情況,第二個數字)之後截斷數字並將其與原始數值進行比較(兩個不同的數值意味着第二個數字比第一個數字更多的小數位)的好方法。使用Math.round(number*100)/100截斷第二個十進制數字後的所有內容。

我希望這可以幫助你解決你的問題。

8

隨着jQuery validation plugin您可以用傑克的正則表達式(我還沒有,雖然測試)這樣設置自己的規則:

jQuery.validator.addMethod(
    "money", 
    function(value, element) { 
     var isValidMoney = /^\d{0,4}(\.\d{0,2})?$/.test(value); 
     return this.optional(element) || isValidMoney; 
    }, 
    "Insert " 
); 

然後你就可以在使用validate方法設置規則

$("#myForm").validate({ 
rules: { 
    nameOfMyInputField: { 
     money: true, 
    } 
} 
}); 
+0

我更新了Jack Zelig在其帖子中更新的正則表達式。 – Moni

0

正如您所說,如果您使用的是MVCMVC框架提供了annotations,它可以用於最佳效果。即使沒有明確的數據註釋decimal

可以使用如下的兩位小數

[RegularExpression(@"^\d+.\d{0,2}$")] 

而對於範圍,你可以使用

[Range(0, 9999.99)] 

所以你的模型場變得

[RegularExpression(@"^\d+.\d{0,2}$")] 
[Range(0, 9999.99)] 
public decimal Money{ get; set; } 

希望它有助於