用于Javascript字母数字的RegEx无法按预期工作
RegEx for Javascript alphanumeric not working as expected
我有以下脚本:
$('#txtUsername').keydown( function(evt) {
if (/^[a-z0-9]+$/i.test(String.fromCharCode(evt.keyCode)) == false) {
evt.returnValue = false;
return false;
}
});
上面的脚本应该防止用户在用户名字段中输入特殊字符。 问题是此脚本允许键入字母数字字符,并且它阻止了"~_+-=[]{}''|;:'",<.>/?
我还需要这个来阻止和 !@#$%^&*() 字符。
我做错了什么? 我正在使用最新的 Chrome 浏览器对此进行测试。
编辑我知道这不是验证用户名的最佳方式,但我质疑为什么正则表达式没有显示正确的行为。
js小提琴点击这里
使用 keypress
事件,而不是 keydown
。当您使用 keydown
时,输入 @ 被视为按 Shift 后跟 2,正则表达式允许2
。 keypress
获取合并的密钥代码。
此外,evt.returnValue
已被弃用。防止正常事件处理程序运行的正确方法是调用 evt.preventDefault()
。
$('#txtUsername').keypress(function(evt) {
if (/^[a-z0-9]+$/i.test(String.fromCharCode(evt.keyCode)) == false) {
evt.preventDefault();
return false;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="txtUsername" />
keydown
只会记录按下了键盘上的实际键,而不是输入的字符,例如在英国键盘上%
输入了shift+5
,因此keydown
只会拾取5
键并接受输入。
您应该改为keypress
:
$(document).ready(function () {
$('#txtUsername').keypress(function (evt) {
if (/^[a-z0-9]+$/i.test(String.fromCharCode(evt.keyCode)) == false) {
evt.returnValue = false;
return false;
}
});
});
更新的小提琴
相关文章:
- 要替换的Javascript Regex无法按预期工作
- Regex拆分-工作一次
- 为什么除了html5输入模式属性之外,这个简单的regex在任何地方都能工作
- 我该怎么做;仅百分比”;Regex工作
- 我的regex可以在regex101.com沙箱中工作,但不能在实际的javascript中工作
- 用于Javascript字母数字的RegEx无法按预期工作
- Regex未在服务器端验证的代码隐藏中工作
- Javascript regex在在线验证器上工作,但在代码中失败
- Regex无法在JavaScript中工作
- regex可以在regex测试程序中工作,但不能在模式中工作
- Regex Lazy模式不会'没有按预期工作
- jQuery-RegEx工作异常
- regex's+-s*|s*-s+'无法正常工作
- 匹配简单URL的regex无法正常工作
- Regex模式无法正常工作.但仅在Extjs/Javascript中
- Regex模式验证手机不工作
- Regex未按预期工作
- 尝试更新vimeo-regex以从URL获取ID,该URL包括“;频道/工作人员挑选”;
- 这个RegEx和替换在JavaScript中究竟是如何工作的
- 如何让Javascript中的除法运算符工作?它认为它'是Regex