我正在使用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();
}
}
非常感谢任何帮助。
答案 0 :(得分:3)
问号应该放在character class:
中/[A-Z\x08?]/
另一个问题是您应该使用onkeypress
来确定键入的字符。 onkeyup
和onkeydown
事件只会告诉您按下和释放了哪些键,但它们没有说出这些键对应的字符。在不同的键盘上,您必须按不同的键才能生成相同的字符。
例如,在我的键盘上,我必须按 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();
}
});