Javascript中的正则表达式解析输入onKeyDown

时间:2012-12-26 00:51:31

标签: javascript regex

我正在使用onKeyDown和正则表达式来解析键盘输入。我需要所有的A-Z,退格和问号。问题来自于?,我无法接受它。我试过了     的 / [A-Z \ X08] /
    的 / [A-Z \ X08 \] /
    的 / [A-Z \ X08 \\?] /
    的 / [A-Z \ 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();
    }
}

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

问号应该放在character class

/[A-Z\x08?]/

另一个问题是您应该使用onkeypress来确定键入的字符。 onkeyuponkeydown事件只会告诉您按下和释放了哪些键,但它们没有说出这些键对应的字符。在不同的键盘上,您必须按不同的键才能生成相同的字符。

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

答案 1 :(得分:2)

如果要在reg匹配时阻止在文本框中打印字符,则应使用按键。 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();
    }
});