2012-01-06 23 views
0

私はユーザーが1ドルの金額で入金を入力する小さなフォームを持っています。この金額は正または負の値を取ることができます。偶然に文字や文字が入力されないようにキーを押すたびに、フォームを検証しようとしています。JavaScript onkeyup正規表現

は、以下の機能を考えてみましょう:

var deposit = document.getElementById("deposit"); 

deposit.onkeyup = function() { 
    var PATTERN = /\d$/; 

    if (!deposit.value.match(PATTERN)) { 
     deposit.value = deposit.value.replace(deposit.value.slice(-1), ""); 
    } 
} 

あなただけのユーザーが数字を入力できるようにしたい場合、これは結構な動作します。他の文字は単に消去されます。私が問題を抱えているところでは、正または負の通貨(ドル記号なし)と一致するようにオンザフライで動作するパターンが登場しています。ユーザーは、オプションのマイナス記号、少なくとも1つの数字、小数点、2つの数字の順に入力する必要があります。

例の預金額:

0.09

100.45

4032.34

-0.90

-54.56

-1353.00

パターンを思い付く助け、あるいはもっと良い方法があれば、大歓迎です。詳細が必要な場合はお知らせください。

+1

あなたの機能を置き換えるには欠陥があります。 'keyup'イベントが発生すると、複数の文字が入力フィールドに入力されている可能性があります。ユーザーが最後にキャレットを置かず、関数もまた破損する可能性があります。 –

答えて

4

あなたはこれらの数値と一致するように、この検証パターンを使用することができます。

^-?\d+\.\d{2}$

+0

このパターンでは、どの文字も入力できません。おそらく、あなたが文字を入力するとき、それはパターン全体と一致しないからでしょうか? – Brett

+0

それは正しいです。正規表現のパターンマッチに基づいてキー入力を停止している場合は、一度に1文字をチェックするだけです。この正規表現のマッチは、フィールドイベント 'onblur'または 'onchange'が発生したときに実行する必要があります。 – James

+0

興味があるかどうかは分かりませんが、JavaScriptフォームのバリデーターに取り組んでいます:http://splatbyte.com/library/jform/docs/demo_quick.phpこれにはいくつかのバリデーションがあらかじめロードされています。 2番目の例では、この検証テストを実行するために使用できるカスタム検証を示しています。このライブラリは、キーのフィルタリングも考慮に入れます。 – James

2

これは、あなたが必要と何をすべき:

var PATTERN = /\-?\d+\.\d{2}$/; 

疑問符は、それがオプションだということを意味します。ユーザーが既にパターンに一致しない、マイナス記号や数字のいずれかで始まりとしてあなたは、すべてのキーを押して上の有効な(負の)小数のために一致することはできません

+0

このパターンは正しいと思われます。しかし、それは私が入力したすべての文字を削除しています。 – Brett

1

注意。

あなたは、入力された文字が有効であるかどうかを確認するために、1つを必要とするだろう、と値は、ユーザーが移動したフィールドから焦点を当てたときに提出するか、上の有効な小数である場合は、別の一つはチェックします。ここで

+0

ええ、それは私が考えていたものです...洞察のおかげで – Brett

0

は私の最終的な解決策でした。私は実際に私が望むように私の "onkeyup"機能を働かせることができました。オンザフライで通貨の書式をチェックするのではなく、指定されていない文字や文字を入力することはできません。これは完璧ではないかもしれませんが、確かにこの小さな仕事のために私のニーズに合っています。入力いただいた皆様に感謝します。

deposit.onkeyup = function() { 
    var PATTERN = /[^0-9-.]/; 

    if (deposit.value.match(PATTERN)) { 
     deposit.value = deposit.value.replace(deposit.value.slice(-1), ""); 
    } 
} 

私は、預金の形式を検証 "のonblur"

var PATTERN = /\-?\d+\.\d{2}$/; 

    if (!reDeposit.value.match(PATTERN)) { 
     depositError.innerHTML = "Enter a valid amount"; 
    }