Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 值受限输入的智能白名单_Javascript_Regex_Validation_Whitelist - Fatal编程技术网

Javascript 值受限输入的智能白名单

Javascript 值受限输入的智能白名单,javascript,regex,validation,whitelist,Javascript,Regex,Validation,Whitelist,我需要限制输入,以便用户只能输入美元金额。这意味着他们可以输入一串数字,可以选择后跟一个小数和0-2个以上的数字。没有逗号,没有美元符号 我发现我认为这是一个很好的模式,但我也希望允许用户使用backspace、enter、tab等。我希望有一个更好的方法来实现这一点,而不是显式列出我白名单上的每个有效键代码。我本来希望/\W/能达到这个目的,但可惜的是,它匹配的按键太多了 这就是我现在拥有的 $input.keypress(function(evt) { var ch = Stri

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

我发现我认为这是一个很好的模式,但我也希望允许用户使用backspace、enter、tab等。我希望有一个更好的方法来实现这一点,而不是显式列出我白名单上的每个有效键代码。我本来希望
/\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})
。它将匹配
$123456.00
以及
123456
@Blender:谢谢,我会使用它,但他们实际上不希望在字段中输入逗号和美元符号。如果我理解正确,您将执行
键控
事件,而不是
按键
,这样,无论按什么键,都会在事件触发时更新字段。如果字段值与模式不匹配,则删除最后一个字符。这是正确的吗?