我正在编写一段 JavaScript 代码,以限制可以输入到文本框中的键。
我的正则表达式现在是
我不确定这些键的符号是什么。
在ie8中,即使从正则表达式中排除了\e开关,按下ESC键(和del/arrows)仍然处于活动状态,当按下时,它会重置/清空文本框。
在FF中,我将escape放入表达式
哪些符号是正则表达式中允许字母数字、L/R箭头、删除和ESC的有效符号?
此外,
谢谢。
使用nnnnn建议的按键代码数字并不能为我(对其他人?)工作的原因是,65-90的按键代码是大写字母的,尽管一些网站声称这些按键代码适用于大小写字母。这个http://www.lookuptables.com/网站显示小写字母的范围是97-122。不幸的是,这个范围与一些字符存在未映射的重叠。例如,\字符列为有220个按键代码。但我的过滤器仍会允许\通过,因为它的按键代码大于122。还有其他的例子。我已经使用笔记本电脑键盘和外部全尺寸键盘进行了测试。
编辑2
我已经将正则表达式和按键代码参数合并为一个函数。该函数原则上可以工作,但由于按键代码冲突太多,它无法处理百分号(%)键。需要同时使用onkeydown和onkeypress才能捕获所有按键(除了%键)。请查看我的讨论这里javascript regex for key event input validations troubleshooting help。
function keyRestricted(e) {
var keypressed;
var keychar;
var keycheck;
// IE - keyCode
// Netscape/Firefox/Opera - which
keypressed = e.keyCode || e.which;
keychar = String.fromCharCode(keypressed);
//alert(keychar);
keycheck = /[a-zA-Z0-9\b]/;
return keycheck.test(keychar);
} //keyrestricted
我的正则表达式现在是
/[a-zA-Z0-9\b]/
,允许字母数字和退格。我想在Firefox(3.6)中使删除、L/R箭头和ESC键能够工作。我不确定这些键的符号是什么。
在ie8中,即使从正则表达式中排除了\e开关,按下ESC键(和del/arrows)仍然处于活动状态,当按下时,它会重置/清空文本框。
在FF中,我将escape放入表达式
/[a-zA-Z0-9\b\e]/
中,但似乎对Firefox不起作用,也就是说,当按下escape键时,它不会重置/清空文本框。哪些符号是正则表达式中允许字母数字、L/R箭头、删除和ESC的有效符号?
此外,
[a-zA-Z0-9\-\_]
的翻译是什么?它旨在匹配字母数字和连字符。但为什么连字符前面有一个斜杠,因为连字符不需要斜杠?还有\_
是什么,因为下划线不被表达式匹配?谢谢。
使用nnnnn建议的按键代码数字并不能为我(对其他人?)工作的原因是,65-90的按键代码是大写字母的,尽管一些网站声称这些按键代码适用于大小写字母。这个http://www.lookuptables.com/网站显示小写字母的范围是97-122。不幸的是,这个范围与一些字符存在未映射的重叠。例如,\字符列为有220个按键代码。但我的过滤器仍会允许\通过,因为它的按键代码大于122。还有其他的例子。我已经使用笔记本电脑键盘和外部全尺寸键盘进行了测试。
编辑2
我已经将正则表达式和按键代码参数合并为一个函数。该函数原则上可以工作,但由于按键代码冲突太多,它无法处理百分号(%)键。需要同时使用onkeydown和onkeypress才能捕获所有按键(除了%键)。请查看我的讨论这里javascript regex for key event input validations troubleshooting help。
<head>
<script type="text/javascript">
function keyRestricted(evt) {
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
var keychar = String.fromCharCode(key);
//alert(keychar);
var keycheck = /[a-zA-Z0-9]/;
// backspace || delete || escape || arrows
if (!(key == 8 || key == 27 || key == 46 || key == 37 || key == 39)) {
if (!keycheck.test(keychar)) {
theEvent.returnValue = false; //for IE
if (theEvent.preventDefault) theEvent.preventDefault(); //Firefox
}
}
}
</script>
</head>
<body>
Please modify the contents of the text field.
<input
type="text" value=""
onKeypress="return keyRestricted(event)"
onKeydown="return keyRestricted(event)"
/>
</body>
keypressed
是否与删除等代码相匹配会更直接。 - pimvdbonchange
、onblur
或onsubmit
时验证字段,除非你有一种牢固的方法来阻止用户粘贴和/或拖放无效字符(如果你有,那么你是唯一一个)。无论如何,别忘了你还必须在服务器端再次验证它。 - nnnnnnkeypressed
变量是否与您关心的键的数字代码匹配(如我的答案中所示),将这样的测试轻松适合于您问题中的函数中。正则表达式不是这项工作的正确工具。接受它并继续前进(就像我要做的那样)。 - nnnnnnoninput
。根据 MDN 的说明,“只有在显示的文本更改时才调用此事件,因此当用户按下不可显示的键时不会调用它。” 因此,它无论如何都不能用于箭头键。而且在旧版本的 IE 或其他一些浏览器中也不支持。 - nnnnnn