0

テキストボックスの入力文字を に制限したい[a-z0-9_-]。ただし、バックスペースや矢印キーなどのこのボタンを使用すると、いつでも機能しません。この Web サイトや他の Web サイトでいくつかの試みを見つけましたが、すべてのブラウザーで適切に機能しないか、ブラック リストを使用しています。たとえば、W3Schools の Web サイトの例では、ブラック リストの番号が示されています。ホワイトリスト (上記のもの) を使用して、バックスペース、矢印、ホーム、終了などのキーを許可する方法はありますか? または、許可したいキーに一致するすべてのキー コードを追加する必要がありますか? 私はこのようなことをします(これは簡単にするために短縮されています)。

編集- コードを追加

 <input type="text" onkeypress="return checkInput();">
    function checkInput(){
        return /[a-z0-9_-]/gi.test(String.fromCharCode(window.event.keyCode));
    }
4

5 に答える 5

2

例の正規表現を次のように変更するだけです。

numcheck = /[^a-z0-9_-]/;

または、さらに良いことに、次のように二重否定を回避します。

numcheck = /[a-z0-9_-]/;
return numcheck.test(keychar);

次に、バックスペースなどのキーコードを調べて、それらも確認できます。

if (keychar === 8) return true;
...

または、それらを正規表現に入れることもできます:

numcheck = /[a-z0-9_\x08-]/;
于 2011-04-04T03:41:36.037 に答える
1

コード サンプルを提供していないため、応答を具体的にするのは難しいですが、一般的な戦略として、これを試してください: 入力中に入力できる文字をホワイトリストに登録する代わりに、すべてのキーストロークの後にテキストボックスを変更して、有効な文字が含まれていることを確認してください。そうでない場合は、最後に入力した文字を削除します。

このアプローチにより、バックスペースなどの特殊キーを使用できると同時に、実際に求めているように聞こえるもの、つまりテキスト ボックスの有効な値を実現できます。

于 2011-04-04T03:44:20.423 に答える
1

はい、文字の入力を制限できます。たとえば、何が起こっているかをチェックする関数を作成し、すべてが OK であれば true を返し、そうでなければ false を返します。

// return true for 1234567890A-Za-z - _
function InputCheck(e) {
    if ((e.shiftKey && e.keyCode == 45) || e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
        if (e.which == 45 || e.which == 95 || (e.which >= 65 && e.which <= 90) || (e.which >= 97 && e.which <= 122))
            return true;
        return false;
    }
    return true;
}

関数を取得したら、それを入力にフックします(これはjQueryを使用しています):

$('#InputID').keypress(InputCheck);

必要に応じて複雑なチェックを行うことができます。たとえば、これにより USD の通貨の値が可能になります。

function InputCheck(e) {
    if ((e.shiftKey && e.keyCode == 45) || e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57) && e.which != 46 && e.which != 36) {
        return false;
    }
    // . = 46
    // $ = 36
    var text = $(this).val();

    // Dollar sign first char only
    if (e.which == 36 && text.length != 0) {
        return false;
    }

    // Only one decimal point
    if (e.which == 46 && text.indexOf('.') != -1) {
        return false;
    }

    // Only 2 numbers after decimal
    if (text.indexOf('.') != -1 && (text.length - text.indexOf('.')) > 2) {
        return false;
    }

    return true;
}
于 2011-04-04T03:45:23.710 に答える
0

ホワイトリストにないものをに含めない限り、好きなキーを押すことができます。

inputelement.onkeyup=function(e){
  e=e || window.event;
  var who=e.target || e.srcElement;
  who.value= who.value.replace(/[^\w-]+/g,'');
}
于 2011-04-04T04:18:56.780 に答える