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来确定输入了哪个字符。onkeyupand事件只告诉您按下和释放了onkeydown哪些键,但它们没有说明这些对应的字符。在不同的键盘上,您必须按不同的键才能生成相同的字符。

例如,在我的键盘上,我必须按下Shift+获得一个?. 在美式键盘上,您通常必须按Shift/才能获得?. 由于键盘布局的这种差异,使用 onkeyup 和 onkeydown 事件来检测是不可靠的?

于 2012-12-26T00:52:28.117 回答
2

如果要防止在 reg 匹配时在文本框中打印字符,则应使用 keypress。注册是:/^[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 回答