JavaScript允许只输入数字、逗号、点和退格键。

7
我编写了一个JavaScript函数,只允许输入数字、逗号和点,格式如下。
function isNumber(evt) {
              var theEvent = evt || window.event;
              var key = theEvent.keyCode || theEvent.which;
              key = String.fromCharCode(key);
              var regex = /^[0-9.,]+$/;
              if (!regex.test(key)) {
                  theEvent.returnValue = false;
                  if (theEvent.preventDefault) theEvent.preventDefault();
              }

}

但是如果我想从文本框中删除任何数字... 回退键不起作用。 然后我将正则表达式代码更改为 "var regex = /^[0-9.,BS]+$/;"

即使我在文本框中使用左右箭头,我仍然无法使用回退键。我做错了吗? 有人能帮忙吗...谢谢。(当我在正则表达式中使用“BS”代替退格键时,它允许在文本框中输入“B”,“S”字符。)


我无法测试它,但你能否尝试使用正则表达式 /^[0-9.,\b]+$/ - Jerry
删除键已经可以用了,谢谢。但我还是无法在文本框中左右移动光标。 - vishnu reddy
如果你正在使用jQuery,请尝试使用alphanumeric插件。 - Catalin
2
不要打扰用户,只有在发送到服务器时才关心值是什么。嗅探按键并不能检查通过其他方式输入的输入。相反,在发送之前提供屏幕提示以进行格式验证,并让用户自己解决。 - RobG
@vishnureddy 哎呀,你也在验证那个?我认为你不应该使用正则表达式来做所有这些。虽然我不太熟悉 JQuery,但 RobG 说的有道理。 - Jerry
我认为如果用户可以移动光标,他可以编辑数字,而不是使用退格键删除到那一部分...好的,我会尝试...谢谢。 - vishnu reddy
3个回答

7

尝试使用这段代码:

function isNumber(evt) {
          var theEvent = evt || window.event;
          var key = theEvent.keyCode || theEvent.which;
          key = String.fromCharCode(key);
          if (key.length == 0) return;
          var regex = /^[0-9.,\b]+$/;
          if (!regex.test(key)) {
              theEvent.returnValue = false;
              if (theEvent.preventDefault) theEvent.preventDefault();
          }
}

这不允许逗号或点。 - Henrique C.

1

尝试这段代码,我进行了修改并成功地让它只允许逗号、点和数字。

function isNumber(evt) {
   var theEvent = evt || window.event;
   var key = theEvent.keyCode || theEvent.which;            
   var keyCode = key;
   key = String.fromCharCode(key);          
   if (key.length == 0) return;
   var regex = /^[0-9.,\b]+$/;            
   if(keyCode == 188 || keyCode == 190){
      return;
   }else{
      if (!regex.test(key)) {
         theEvent.returnValue = false;                
         if (theEvent.preventDefault) theEvent.preventDefault();
      }
    }    
 }

1

我把几个脚本结合在一起了。对我来说,我只想要数字和一个逗号。

    $("#TBDepositAmount").keyup(function () {//if a full stop gets through, on keyup, it is changed to a comma
        var val = $(this).val();
        var str = val.replace('.', ',');
        $(this).val(str);
    });

    $("#TBDepositAmount").keydown("keypress keydown blur", function (event) {            

        var key = event.charCode || event.keyCode || 0;
        if ((key == 110 || key == 190) && $(this).val().split(",").length == 1) { //checks whether input is a full stop and lets only 1 through
            return;
        }
        else
            return ( // check if it is a number, only allows numbers through
                key == 8 ||
                key == 9 ||
                key == 13 ||
                key == 46 ||
                (key >= 35 && key <= 40) ||
                (key >= 48 && key <= 57) ||
                (key >= 96 && key <= 105));                           
    });

我的输入如下:

 @Html.TextBoxFor(x => x.deposits.depositAmount, new { @class = "form-control ", autocomplete = "off", id = "TBDepositAmount" })

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接