【问题标题】:Prevent characters like quotation marks from input防止输入引号等字符
【发布时间】:2014-12-31 11:18:11
【问题描述】:

我使用正则表达式只允许字母、数字和点 (.)

$('input').on('keydown', function (e) {
    if (/^[a-zA-Z0-9\.\b]+$/.test(String.fromCharCode(e.keyCode))) {
        return;
    } else {
        e.preventDefault();
    }
});

jsFiddle

但是,仍然可以插入诸如 "、é、~e、#、$ 等字符。所以我的意思是您使用 Shift 键键入的字符。

此外,仍然允许使用 alt+1234 输入字符。

有没有办法在输入的 keydown 事件中防止这种情况发生?

【问题讨论】:

  • stackoverflow.com/a/10866473差不多,也面临同样的问题。
  • @M42 我使用 \b 来允许退格。正则表达式工作正常,但它仍然允许很多特殊字符。我认为这更像是一个 javascript 问题而不是正则表达式问题。
  • 使用 keypress 代替 keydown 来防止 ALT+1...

标签: javascript jquery html regex


【解决方案1】:

keypress 事件在浏览器注册时发送到元素 键盘输入。这类似于 keydown 事件,除了在 键重复的情况。如果用户按住一个键,一个 keydown 事件被触发一次,但单独的按键事件被触发 每个插入的字符。

因此,要避免使用 SHIFT + KEY、ALT+ KEY,请使用 keypress 而不是 keydown

$('input').on('keypress', function (e) {
    if (/^[a-zA-Z0-9\.\b]+$/.test(String.fromCharCode(e.keyCode))) {
        return;
    } else {
        e.preventDefault();
    }
}); 

fiddle is here

【讨论】:

  • 它似乎工作正常,您尝试刷新浏览器了吗?
  • 对我来说这很好用。我注意到的只是一件小事:当按 ' 然后按一个字符(如 e 或其他东西)时,e 没有出现在文本框中。
  • OK 刚刚再次测试:对我来说它在 Chrome 中运行良好,但在 Firefox 33.1 中却不行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多