1

キーボード入力を解析するためにonKeyDownと正規表現を使用しています。すべてのAZ、バックスペース、疑問符に必要です。問題は?にあります、私はそれを受け入れることができません。/ [AZ \ x08 ?] /
/ [AZ \ x08 \?] /
/ [AZ \ x08 \\?] /
/ [AZ \ x08 \x3F]/を試しました

どれも許可しませんか?受け入れられる。

function kd(evt) {
    var theEvent = evt || window.event;
    var key = theEvent.keyCode || theEvent.which;
    key = String.fromCharCode(key);
    var regex = /[A-Z\x08]/;
    if (!regex.test(key)) {
        theEvent.returnValue = false;
        if (theEvent.preventDefault) theEvent.preventDefault();
    }
}

どんな助けでも大歓迎です。

4

2 に答える 2

3

疑問符は文字クラス内に配置する必要があります:

/[A-Z\x08?]/

onkeypressもう1つの問題は、入力された文字を判別するために使用する必要があることです。onkeyupandイベントはonkeydown、どのキーが押されて離されたかを示すだけですが、これらがどの文字に対応するかは示していません。異なるキーボードでは、同じ文字を生成するために異なるキーを押す必要があります。

たとえば、キーボードでは、を押しShift+を取得する必要があり?ます。米国のキーボードでは、通常、を押しShift/取得する必要があります?。キーボードレイアウトのこの違いのため、onkeyupイベントとonkeydownイベントを使用してを検出することは信頼できません?

于 2012-12-26T00:52:28.117 に答える
2

regが一致したときにテキストボックスにcharを印刷したくない場合は、キープレスを使用する必要があります。そしてregは次のとおり/^[a-zA-Z\x08\?]$/です。これは私にとってはうまくいきます。

var regex = /^[a-zA-Z\x08\?]$/;
// OR this one if you want uppercase letters:
var regex = /^[A-Z\x08\?]$/;
$("#regtest").keypress(function(event) {
    var _event = event || window.event;
    var key = _event.keyCode || _event.which;
    alert(key);
    key = String.fromCharCode(key);
    alert(key);
    if(regex.test(key)) {
        _event.returnValue = false;
        if (_event.preventDefault)
            _event.preventDefault();
    }
});
于 2012-12-26T01:09:17.140 に答える