【发布时间】:2017-12-15 11:36:44
【问题描述】:
我目前有一个在输入文本框中的按键触发的事件。我目前有一些正则表达式可以将输入限制为大多数情况下有效的字母数字。但是,我发现正则表达式仍然允许以下字符%.'。
我可以为这些字符的 charCodes 返回 false,但我觉得 Regex 应该做验证字符的工作,或者在这种情况下使用 regex 有什么意义。
有谁知道我该如何纠正这个问题,使这些非字母数字字符无法通过验证?
编辑:添加代码片段
$('#nationalIdNumber').keypress(function(e) {
var regex = new RegExp("^[a-zA-Z0-9]+$");
var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
if (regex.test(str) || e.keyCode === 8 || e.keyCode === 37 || e.keyCode === 39 || e.keyCode === 46) {
return true;
}
e.preventDefault();
return false;
});
<script src="https://code.jquery.com/jquery-3.2.1.js" integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE=" crossorigin="anonymous"></script>
<input id="nationalIdNumber" type="text" />
【问题讨论】:
-
你在字符类中使用
a-Z吗?给定的正则表达式应该可以正常工作。 -
我在这里检查了你的正则表达式 regex101.com 并且它不允许 % 符号
-
我已编辑问题以包含代码 sn-p,它显示了错误。我已经尝试过了,确实正则表达式允许
%.'。我想这将是 js 本身的错误@Tushar @KhanjanBhatt -
因为数字
5和%的keyCode是相同的,并且fromCharCode将为%按键提供5,它允许这些字符。它甚至允许所有特殊字符!@#$%^&*()_+。