2016-03-27 25 views
0

ユーザーが特定の製品の価格を入力するフォームにinput要素があります。これを行うには、小数点を含む金額を入力するか、小数点のない価格を入力するだけです。検証プラグインを使用して10進数を検証する

<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 
     } 
    } 
}) 

これは、私はしかし、私は私が達成したいものを得ることはありませんでしたものです。私は、ユーザが長さ10numberを最大でtwoの小数点以下を置くことができるようにしています。たとえば、彼が1111111111または1111111111.11と入力した場合、これらは両方とも有効である必要があります。私は何をすればいいのですか?コードは何ですか?

ありがとうございます!

答えて

2

使用正規表現を。 JavaScriptでは、

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

この正規表現は14687132518671.68なく46812547.178687と一致する必要があります。

ところで、あなただけそれらを削除:)

Fiddle

+0

は "100"では機能しません。 ?/^\ d {1,10} \。\ d {0,2} $/' – David784

+0

@ David784もちろんそれは妥当な10進数ではありません。そうでなければ、彼は尋ねていませんでしたあなたが正規表現にした数のために。 – 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

を、maxlengthstep属性を必要としないと起動時に私は右の追加メソッドのためのスクリプトを含める必要がありますか? –

+0

申し訳ありませんが、私はあなたが何を意味するか分からない。変更する必要があるのは、 '$( 'addForm')。validate()'の上の '$(document).ready()'のどこかに '$ .validator.methods'文を追加することだけです。 – David784

+0

maxlengthはここで10に固定されています。その後、10進数を表示しません。私は 'maxlength'属性を削除する必要がありますか? –