Regex-允许数字0-9、Backcapce和1点Javascript

Regex - Allow Numbers 0-9, Backsapce and 1 dot Javascript

本文关键字:Backcapce 1点 Javascript 许数字 数字 Regex-      更新时间:2023-09-26

我有一个作用于keydown事件的函数,我希望它只允许数字、退格和1个点。我做不到。以下是我尝试过的:

$('#input[type="number"]').keydown(function(e) {
            this.value = this.value.toLowerCase();
            var regex = new RegExp("^[0-9.,'b]+$");
            var key = String.fromCharCode(!e.charCode ? e.which : e.charCode);
            if (!regex.test(key)) {
                console.log('stop now')
                e.preventDefault();
                return false;
            }
});

它仍然防止点,但允许数字。我认为我的Regex是错误的,需要调整一下。

评论已经消失,但一些用户认为这可能与.,的转义有关??有什么想法吗?

使用keypress代替keydown事件。为keydown事件的某些密钥发送了不同的charcode。点就是其中之一,发送代码190而不是ASCII 46。你可以在这里玩。

您可以使用它而不是使用regex。我想这会帮助你

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">  
  <script type="text/javascript" language="jscript">
      function fncInputNumericValuesOnly() {
          if (!(event.keyCode == 32 || event.keyCode == 46 || event.keyCode == 48 || event.keyCode == 49 || event.keyCode == 50 || event.keyCode == 51 || event.keyCode == 52 || event.keyCode == 53 || event.keyCode == 54 || event.keyCode == 55 || event.keyCode == 56 || event.keyCode == 57))
          {
              event.returnValue = false;
          }
      }
</script>
</head>  
<body>  
    <form id="form1" runat="server">  
    <div>  
    <asp:TextBox ID="txtEmpName" onkeypress="fncInputNumericValuesOnly()" runat="server"></asp:TextBox>   
    </div>  
    </form>  
</body>  
</html>  

我的答案来得有点晚,但我已经将您的代码更改为适用于您的代码:

var valid_value = '';
$('#input[type="number"]').keyup(function(e) {
        var regex = new RegExp(/^[0-9]*'.?[0-9]*$/);
        if (!regex.test(this.value)) {
            this.value = valid_value;
            console.log('stop now');
        } else {
            valid_value = this.value;
        }
});

你试过这样的东西吗?当然,这并不完美,但你可以把它作为一个起点:

var whitelist = /^'d+'.?'d+?['b]?$/;
function testInput() {
  var val = document.getElementById('val').value;
  var res = document.getElementById('res');
  
  if(whitelist.test(val)) {
     res.innerText = 'YEP';
  } else {
     res.innerText = 'NOOPE';
  }  
}
<input onchange="testInput()" type="text" id="val"/>
<h1 id="res"></h1>

这就是我最终想到的。一本小手册,但能起作用!

$('#input[type="number"]').keydown(function(e) {
         if (!(e.keyCode == 190 || e.keyCode == 8 || e.keyCode == 9 || e.keyCode == 13 || e.keyCode == 32 || e.keyCode == 46 || e.keyCode == 48 || e.keyCode == 49 || e.keyCode == 50 || e.keyCode == 51 || e.keyCode == 52 || e.keyCode == 53 || e.keyCode == 54 || e.keyCode == 55 || e.keyCode == 56 || e.keyCode == 57)) {
                e.returnValue = false;
                e.preventDefault();
                return false;
            }
});

参加派对有点晚,但这样可以。

编辑:在你否决之前点击运行代码狙击

var onlySome = restrictKeys([8,190]) // allow the dot
// decorate the jquery function with some functional goodness
$('input[type="text"]').keydown(onlySome(function(e) {
  stackLog(['key alowed', e.which, String.fromCharCode(e.which)]);
}));
// functional function to partially apply restricted keys and callback functiion
function restrictKeys(keys) {
  return function(fn) {
    return function(e) {
      // all codes between 48 and 57 are number and cool to leave in, then just filter out our array
      if ((e.which < 48 || e.which > 57) && keys.indexOf(e.which) < 0) {
        stackLog(['nope', e.which, String.fromCharCode(e.which)]);
        e.preventDefault();
        return false
      }
      return fn.call(this, e);
    }
  }
}
function stackLog(log) {
  var _console = document.querySelector('#console');
  _console.innerHTML = JSON.stringify(log) + ''n' + _console.innerHTML;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" placeholder="enter text here">
<pre id="console"></pre>