【问题标题】:Smart whitelisting for a value restricted input值限制输入的智能白名单
【发布时间】:2012-07-02 18:52:18
【问题描述】:

我需要限制输入,以便用户只能输入美元金额。这意味着他们可以输入一串数字,可选地后跟一个小数和 0-2 个数字。没有逗号,没有美元符号。

我发现我认为这是一个很好的模式,但我也希望允许用户使用退格、回车、制表符等。我希望有一种更好的方法来做到这一点,而不是明确列出每个有效的键码我的白名单。我希望/\W/ 能解决问题,但是可惜它匹配的按键太多。

这是我目前拥有的。

  $input.keypress(function(evt) {
    var ch = String.fromCharCode(evt.which);
    var val = evt.target.value + ch;
    var pattern = /^\d+(\.?(\d{1,2})?)$/;
    if (!pattern.test(val)) {
      evt.preventDefault();
    }
  });

如果有一种智能且简洁的方式允许用户进行更正并使用键盘导航表单,我会很高兴听到它。

如果您有改进上述正则表达式的建议,请随时将其包含在您的答案中(如果您没有答案,请在评论中留下)。

谢谢!

【问题讨论】:

  • 我会尝试这样的正则表达式:\$?[0-9,]+\(?:.[0-9]{2})?。它将匹配 $123,456.00123456
  • @Blender:谢谢,我会使用它,但他们实际上不希望在字段中输入逗号和美元符号。

标签: javascript regex validation whitelist


【解决方案1】:

当我在我的代码中执行此操作时,我不会在按键本身上运行正则表达式,而是在他们正在输入的字段的内容上运行。这样您就不必担心非打印字符。您将需要担心它们会被剪切粘贴到不会触发该按键事件的字段中。

【讨论】:

  • 如果我对您的理解正确,您将执行keyup 事件而不是keypress,这样无论按什么键都将在事件触发时更新该字段。然后,如果字段值与模式不匹配,您将删除最后一个字符。这是正确的吗?
猜你喜欢
  • 2016-04-25
  • 2016-02-21
  • 1970-01-01
  • 2020-06-16
  • 2013-06-08
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
相关资源
最近更新 更多