用于关键事件输入验证的Javascript正则表达式故障排除帮助
javascript regex for key event input validations troubleshooting help
我正在编写这段代码来检测并只允许文本框中的字母数字和退格/del/箭头键事件。它按预期工作,除了它不阻止%
符号,单引号'
和句号.
显示。我在本地主机、w3cschool网站、笔记本电脑键盘和外部usb键盘上的不同浏览器上进行了测试。请查看代码,看看为什么这些键是允许的,看看它是否是问题与正则表达式/过滤器或键盘的字符码传输。
TIA
编辑如果我像普鲁士建议的那样使用onkeydown事件,脚本将不允许出现句号或单引号,但现在它将允许出现所有的shift/数字字符!@#$%^&*等。
当我同时使用onkeydown和onkeypress事件时(就像现在的代码一样),它将把条目限制为我想要的,除了%
符号。我不明白为什么%
符号不会被过滤。
如果我把keycheck变量改成keycheck =/%/;然后过滤%符号(是的,即使代码说允许%符号)。非常奇怪。我用的是普通的戴尔笔记本电脑英文键盘。
<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]/;
if (!(key == 8 ||
key == 27 ||
key == 46 ||
key == 37 ||
key == 39 )) { // backspace delete escape arrows
if (!keycheck.test(keychar)) {
theEvent.returnValue = false; //for IE
if (theEvent.preventDefault)
theEvent.preventDefault(); //Firefox
//alert ("key allowed");
}
}
}
</script>
</head>
<body>
Please modify the contents of the text field.
<input type="text" onKeypress="return keyRestricted(event)" value="" />
</body>
按键事件不用于箭头键,退格键和类似的东西。你不需要检查这个
在这个事件中,你得到了代表按下的键的字符码,并且发生
% charcode 37
. charcode 46
' charcode 39
在按键事件中,移位状态已被应用(例如::码97,码65)。如果你需要在键上有一些特殊的效果,不产生字符按下,你需要听keydown/keyup事件在那些你得到的键码,他们在键盘和移位状态不适用,当你按下键"A"不重要,如果shift被按下(或大写锁定),你总是得到65。
编辑:去掉第一个if。
编辑:试题:
function keyRestricted(evt) {
var theEvent = evt || window.event;
var rv = true;
//var key = theEvent.keyCode || theEvent.which;
var key = (typeof theEvent.which === 'undefined') ? theEvent.keyCode : theEvent.which;
if (key && (key !== 8)){
var keychar = String.fromCharCode(key);
var keycheck = /[a-zA-Z0-9]/;
if (!keycheck.test(keychar) )
{
rv = theEvent.returnValue = false;//for IE
if (theEvent.preventDefault) theEvent.preventDefault();//Firefox
}
}
return rv;
}
我在Firefox, Chrome和IE(9-7)上测试过了,它似乎确实满足了你的需求。对不起,贴错代码了,试试这个=)
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 键按正则表达式以查找具有负值的小数
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 将po-box javascript正则表达式转换为c#regex
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 使用正则表达式捕获“”并分割成阵列
- 将这些正则表达式从javascript转换为Java
- 用于验证JS中逻辑运算符表达式的正则表达式