Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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
正则表达式-允许数字0-9、反循环和1点Javascript_Javascript_Regex - Fatal编程技术网

正则表达式-允许数字0-9、反循环和1点Javascript

正则表达式-允许数字0-9、反循环和1点Javascript,javascript,regex,Javascript,Regex,我有一个作用于按键事件的函数,我希望它只允许数字、退格和1点。我做不到。以下是我尝试过的: $('#input[type="number"]').keydown(function(e) { this.value = this.value.toLowerCase(); var regex = new RegExp("^[0-9.,\b]+$"); var key = String.fromCharCode(!e.charCo

我有一个作用于按键事件的函数,我希望它只允许数字、退格和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;
            }
});
它仍然阻止点,但允许数字。我认为我的正则表达式是错误的,需要调整


注释不见了,但一些用户建议这可能与转义
有关??有什么想法吗?

使用
keypress
插入
keydown
事件。为
keydown
事件的某些键发送了不同的字符码。点就是其中之一,它发送代码
190
,而不是ASCII
46
。你可以玩玩它。

晚会有点晚了,但这样行得通

编辑:在下一票之前单击RunCodeSnippit

var onlySome=restrictKeys([8190])//允许点
//用一些函数的优点来修饰jquery函数
$('input[type=“text”]”)。向下键(仅部分(函数(e)){
stackLog(['key alow',e.which,String.fromCharCode(e.which)]);
}));
//部分应用受限键和回调函数的函数
功能限制键(键){
返回函数(fn){
返回函数(e){
//所有48到57之间的代码都是数字,很酷可以输入,然后过滤掉我们的数组
if((e.which<48 | | e.which>57)和&keys.indexOf(e.which)<0){
stackLog(['nope',e.which,String.fromCharCode(e.which)]);
e、 预防默认值();
返回错误
}
返回fn.call(this,e);
}
}
}
函数堆栈日志(日志){
var#u console=document.querySelector('#console');
_console.innerHTML=JSON.stringify(log)+'\n'+\u console.innerHTML;
}

你有没有试过这样的方法? 当然,这并不完美,但您可以将其作为起点:

var白名单=/^\d+\.?\d+?[\b]?$/;
函数testInput(){
var val=document.getElementById('val').value;
var res=document.getElementById('res');
if(白名单测试(val)){
res.innerText='是';
}否则{
res.innerText='NOOPE';
}  
}

我的答案来得有点晚,但在这里,我已将您的代码更改为适合您的代码:

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;
        }
});

您可以使用它而不是使用正则表达式。我想这对你有帮助

<!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>  

函数fncInputNumericValuesOnly(){
如果(!(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==57))
{
event.returnValue=false;
}
}

这就是我最后想到的。一个小手册,但做的把戏

$('#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;
            }
});

在编写正则表达式时,我使用它来可视化流。如果您只需要一个点,则正则表达式中会有一个错误,因为
+
符号是一个量词,意味着介于一次和无限次之间。您可以说“希望它只允许数字”。然后你说“仍然允许数字”。是否允许使用数字?为什么在regexp中有逗号?@torazaburo-是的,我有。我的意思是,由于上述原因,我的代码允许数字通过OK。它仍然可以防止圆点通过。我想尝试做一个正则表达式,它只允许数字、退格和一个点出现。有什么想法吗?谢谢,但是在上面的上下文中,它是如何工作的呢。我会将其设置为正则表达式,并进行某种
.match(白名单)
-如果您有一个可用的小提琴或示例,那就太好了。谢谢您的回答,但当我尝试在代码中使用您的正则表达式时,这对我来说并不适用。现在我只能接受数字和句点。如果这是问题所在,那么超过1就不重要了。谢谢,这条提示让我找到了我发布的答案!干杯谢谢这有帮助。