2016-03-27 53 views
0

我的表單中有一個input元素,其中用戶輸入特定產品的價格。要做到這一點,他可以用十進制數字來表示一個金額,或者他可以簡單地把一個沒有十進制數字的價格。驗證使用驗證插件的十進制數

<input type="text" id="product_price" name="product_price" maxlength="10" step="0.01" placeholder="Enter price"> 
$('#addForm').validate({ 
    rules:{ 
     product_name: { 
      required: true, 
     }, 
     product_price: { 
      required: true, 
      number: true 
     } 
    } 
}) 

這是我做的,但是我沒有得到我想要的東西來實現。我正在嘗試使用戶可以將number的長度10設置爲小數點以下的two。例如,如果他輸入11111111111111111111.11這兩個都應該有效。我該怎麼做,代碼是什麼?

謝謝!

回答

2

使用正則表達式。在JavaScript中,

if (/^\d{1,10}(\.\d{2})?$/.test(product_price.value)) 
    // do stuff 

此正則表達式應該匹配14687132518671.68但不46812547.178687

順便說一句,你不需要maxlengthstep屬性,只需將其刪除:)

Fiddle

+0

不適用於「100」。會推薦'/^\ d {1,10} \。?\ d {0,2} $ /' – David784

+0

@ David784當然不會,那不是有效的十進制數,否則他不會問對於你製作的正則表達式。 – PDKnight

1

不知道它是否只是我,但我不能讓step可靠地工作。但看起來驗證會允許你爲override the method的數字(或任何其他類型)。因此,這裏就是我可能會做:

$.validator.methods.number = function(value,e) { 
    return this.optional(e) || /^\d+\.?\d{0,2}$/.test(value) 
}; 

正則表達式將確認至少有一個輸入號碼後,後面可以跟一個小數點和兩個附加數字。

,然後刪除步驟:

<input type="text" id="product_price" name="product_price" maxlength="10" placeholder="Enter price"> 
+0

,並在開始我應當包括適合其他方法的腳本? –

+0

對不起,我不確定你的意思。所有你應該改變的是在你的'$(document).ready()'中的'$('#addForm')。validate()'之上添加'$ .validator.methods'語句。 – David784

+0

maxlength在這裏已經固定爲10,因此在它之後它不顯示十進制數字。我應該刪除'maxlength'屬性嗎? –