javascript - 编写此代码的更简洁方法[限制 <input> 上的字符]

标签 javascript html

通过浏览 stackoverflow,我设法在我的 <input> 上编写了这段代码

onkeyup="this.value = this.value.replace(/[qwertyuopasdfghjklzxcvbnm ]/g, '')"

我打算限制键盘,但字母i-和数字0-9除外。它对我的程序运行良好,但是有没有更简洁的方法来编写此代码?

最佳答案

由于您只有几个要包含的字符,因此您可以使用负字符集来指定这些字符,而不是指定要删除的字符集:

this.value = this.value.replace(/[^i0-9-]/g, '')

如果可能的话,您还应该考虑使用 Javascript 正确附加事件监听器,而不是使用内联处理程序:

const input = document.querySelector(<input selector>);
input.addEventListener('keyup', function() {
  this.value = this.value.replace(/[^i0-9-]/g, '');
});

另一个可能的改进是在 keypress 事件上使用 preventDefault 来代替,而不是让不需要的字符出现一秒钟然后立即消失:

const input = document.querySelector('input');
input.addEventListener('keypress', function(e) {
  if (!/[i0-9-]/.test(e.key)) {
    e.preventDefault();
  }
});
<input>

(不过,上面仍然允许通过粘贴和单击拖动等方式输入这些字符,因此当这些事件被触发时,您将不得不求助于 .replace 方法)

关于javascript - 编写此代码的更简洁方法[限制 &lt;input&gt; 上的字符],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54120856/

相关文章:

javascript - 限制菜单中的元素并在单击下一步按钮时显示

html - 如何使输入元素变大

html - 阴影标题显示不正确

javascript - 如何在 Visual Studio 中从数据库(使用 C#)获取数据时使 HTML 行可点击

javascript - jquery ui 组合框下拉菜单置于最前面

javascript - 使 DIV 固定在可滚动的 DIV 中

javascript - keydown() 和 Web Audio API 触发了太多事件

javascript - 当我绑定(bind) false 值时,我的 Angular 7 Web 组件 @Input<boolean> 不起作用

javascript - 当 Div 向左浮动时动画位置变化

javascript - 从我的网站访问 GCP API