1

数値データのみであることを検証する必要があるテキスト ボックス (価格用) があります。また、先行するゼロの数字 (01 など) を許可できません。そこで、replace メソッドを正規表現で使用しました。文字を置き換えるために、これが使用されました:

$("#txtPrice").keyup(function(){
    var text=$(this).val();
    $(this).val(text.replace(/[^\d\s\.]/,""));
});

前のゼロを置き換えるために、私は使用しました

$("#txtPrice").keyup(function(){
    var text=$(this).val();
    $(this).val(text.replace(/^0+/, ''));
 });

Firefox では正常に動作しますが、IE では動作がおかしくなります。

数字の前に新しい数字を追加すると、新しい数字が数字の末尾に追加されます。たとえば、「56」を「156」に編集すると、最後に数字の 1 が追加されて「561」になります。数字を先頭に配置しようとすると、実際にはテキストフィールドの末尾に追加されます。この動作をどのように解決できますか?

4

1 に答える 1

0

あなたが経験していることは、入力の最初に1を置き、IEが最後にそれを叩くほどではないと思いますが、IEは実際にはカーソルを入力の前に移動することを許可していません。矢印/ホームキー操作をキャプチャしてキーアップをトリガーし、2つの正規表現を実行し、テキストを置き換えます。

おそらくあなたがする必要があるのは、検出されたキーが何であったかを評価し、それが実際の文字と一致する場合にのみそれを使って何かをすることを気にすることです。

このようなものはあなたの状況に対処しますか?

$("#txtPrice").keyup(function(event) {
    // avoid triggering on control characters; FF ignores but IE will execute and possibly confuse
    if (event.which > 40) {
        var text = $(this).val();
        $(this).val(text.replace(/^0+/, ''));
        $(this).val(text.replace(/[^\d\s\.]/,""));
    }
});

おそらくいくつかの例外を設ける必要event.which > 40があり、ユーザーのカーソルをキーを押したばかりの場所にとどまらせる方法は完全にはわかりませんが、これで十分な解決策になると思います。

編集:正規表現を1つに結合しました。更新されたjsfiddleを参照してください。

$(this).val(text.replace(/(^0+|[^\d\s\.])/, ""));

編集:カーソルの「ジャンプ」をできるだけ少なくしたい場合は、そのテキストが一致することをすでに確認しているときに、オプションで不正なテキストを置き換えることができます。これがデモンストレーションです。

if ($(this).val().match(/(^0+|[^\d\s\.])/)) {
    $(this).val(text.replace(/(^0+|[^\d\s\.])/, ""));
}

フィドルで行ったように、正規表現を変数に外挿することもできます。

于 2012-04-17T14:01:38.943 に答える