javascript - 使用粘贴时有效的 html 输入验证

标签 javascript jquery html regex input

我使用以下代码进行验证,它只允许字母和数字以及一些允许的字符。

$('input').bind('keypress', function (event) {
    var regex = new RegExp("^[a-zA-Z0-9%()#@-_& ]+$");
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
    if (!regex.test(key)) {
       event.preventDefault();
       return false;
    }
});

我遇到的唯一问题是,如果您复制并粘贴任何不允许的字符,那么这并不能阻止它。我知道我已经在某个地方看到过这样做,它可以防止粘贴字符。有什么想法吗?

最佳答案

你必须做两件事:

  1. 绑定(bind)paste事件(上面已经提到)
  2. 修复您的 regex 允许 @_ 之间的字符(所有字母和一些字符,如 ^, [... 因为你没有转义连字符,它创建了一个范围 [@-_],这是有效的(这就是您没有收到任何错误的原因),但这不是您所期望的。

enter image description here

固定代码如下:

$('input').bind('keypress paste', function (event) {
var regex = /^[a-zA-Z0-9%()#@_& -]+$/;
var key = String.fromCharCode(event.charCode || event.which);
if (!regex.test(key)) {
   event.preventDefault();
   return false;
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="txt1"/>

关于javascript - 使用粘贴时有效的 html 输入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32560674/

相关文章:

html - 完全相同的线性渐变线看起来不同

javascript - CORS 和编号 'Access-Control-Allow-Origin'

javascript - 如何禁用可折叠面板上的展开折叠提示?

javascript - 按数据属性、字母顺序和数字顺序对列表项进行排序

javascript - 如何循环遍历新生成的数组而不覆盖它?

javascript - 如何使用javascript在输入开始时放置一个不能删除的字符

javascript - 使用 AJAX 实时搜索栏时出现“ERR_EMPTY_RESPONSE”

javascript - Ajax 获取请求在 5 次调用后没有得到响应

javascript - javascript 在模糊表单验证方面遇到问题

html - 绝对定位元素和响应式设计