Javascript 正则表达式仍然允许在末尾使用十进制

Javascript 正则表达式仍然允许在末尾使用十进制,javascript,angularjs,regex,Javascript,Angularjs,Regex,大家好,我在angular工作,我正在尝试创建一个过滤器,只允许数字的格式为“任意数量的数字。任意数量的数字”,否则,如果不是[0-9.]格式,将阻止输入。该模式仍然允许在输入字段中输入这样的数字000.00. 如何阻止它插入最后一个小数点?提前感谢您的帮助 代码 $scope.filterValue = function($event, value){ var char = String.fromCharCode($event.keyCode); if(value === nu

大家好,我在angular工作,我正在尝试创建一个过滤器,只允许数字的格式为
“任意数量的数字。任意数量的数字”
,否则,如果不是
[0-9.]
格式,将阻止输入。该模式仍然允许在输入字段中输入这样的数字
000.00.

如何阻止它插入最后一个小数点?提前感谢您的帮助

代码

$scope.filterValue = function($event, value){
    var char = String.fromCharCode($event.keyCode);
    if(value === null){
        if(isNaN(char)){
            $event.preventDefault();
        }
    }else{  
        var pattern = /^-?[0-9]{0,}\.?[0-9]{0,}$/;
        if(pattern.test(value)){
            if(isNaN(char) && (value.indexOf(".") == value.length-1)){
                $event.preventDefault();
            }
        }else{
             $event.preventDefault();
        }
    }
};
试试这个

var regex = /^-?([0-9]{1,})(?:\.[0-9]+)?$/;
试试这个

var regex = /^-?([0-9]{1,})(?:\.[0-9]+)?$/;
我将引用一篇由比我聪明的人写的文章。以下是此处建议的正则表达式:

^[-+]?[0-9]*\.?[0-9]+$     
还有一个解释——它定义了可选输入和强制输入。在这种情况下,您希望至少有一个数字是最终的
[0-9]+
,但也允许有更多的数字和可选的点字符。正则表达式还允许数字以
+
-
开头

var regex=/^[-+]?[0-9]*\.?[0-9]+$/;
var测试=功能(输入){
console.log(“测试[“+input+”]。结果:”+(regex.test(input)?“通过”:“失败”);
}
//有效的
测试(“1”);
测试(“2.1”);
测试(“3.14”);
测试(“-4”);
测试(“+5”);
测试(“.6”);
测试(“-.7”);
测试(“+8”);
//无效的
测试(“”;//是-空字符串
测试(“.”);
测试(“-”);
测试(“+”);
测试(“-”);
测试(“+”);
测试(“9”);
测试(“10..1”);
试验(“11.1.2”);
测试(“12.1”);
测试(“…13”);
测试(“-.14”);
试验(“+…15”)我将引用一篇由比我聪明得多的人写的文章。以下是此处建议的正则表达式:

^[-+]?[0-9]*\.?[0-9]+$     
还有一个解释——它定义了可选输入和强制输入。在这种情况下,您希望至少有一个数字是最终的
[0-9]+
,但也允许有更多的数字和可选的点字符。正则表达式还允许数字以
+
-
开头

var regex=/^[-+]?[0-9]*\.?[0-9]+$/;
var测试=功能(输入){
console.log(“测试[“+input+”]。结果:”+(regex.test(input)?“通过”:“失败”);
}
//有效的
测试(“1”);
测试(“2.1”);
测试(“3.14”);
测试(“-4”);
测试(“+5”);
测试(“.6”);
测试(“-.7”);
测试(“+8”);
//无效的
测试(“”;//是-空字符串
测试(“.”);
测试(“-”);
测试(“+”);
测试(“-”);
测试(“+”);
测试(“9”);
测试(“10..1”);
试验(“11.1.2”);
测试(“12.1”);
测试(“…13”);
测试(“-.14”);

试验(“+…15”)这些正则表达式应该涵盖您可能需要的内容。
总体假设是必须有输入,因此我们使用
积极检查表格的交替

这不需要点

^-?(?:\d+(?:\。\d*)?\。\d+$

 ^ 
 -?
 (?:
      \d+                  # Digits 
      (?: \. \d* )?        # Optional  ( dot, optional ( digits ) )
   |                     # or,
      \. \d+               # Dot, digits 
 )
 $
 ^ 
 -?
 (?:
      \d+                  # Digits 
      \. \d*               # Dot, optional digits 
   |                     # or,
      \. \d+               # Dot, digits 
 )
 $
这需要一个点

^-?(?:\d+\.\d*|\.\d+$

 ^ 
 -?
 (?:
      \d+                  # Digits 
      (?: \. \d* )?        # Optional  ( dot, optional ( digits ) )
   |                     # or,
      \. \d+               # Dot, digits 
 )
 $
 ^ 
 -?
 (?:
      \d+                  # Digits 
      \. \d*               # Dot, optional digits 
   |                     # or,
      \. \d+               # Dot, digits 
 )
 $

这些正则表达式应该涵盖您可能需要的内容。
总体假设是必须有输入,因此我们使用
积极检查表格的交替

这不需要点

^-?(?:\d+(?:\。\d*)?\。\d+$

 ^ 
 -?
 (?:
      \d+                  # Digits 
      (?: \. \d* )?        # Optional  ( dot, optional ( digits ) )
   |                     # or,
      \. \d+               # Dot, digits 
 )
 $
 ^ 
 -?
 (?:
      \d+                  # Digits 
      \. \d*               # Dot, optional digits 
   |                     # or,
      \. \d+               # Dot, digits 
 )
 $
这需要一个点

^-?(?:\d+\.\d*|\.\d+$

 ^ 
 -?
 (?:
      \d+                  # Digits 
      (?: \. \d* )?        # Optional  ( dot, optional ( digits ) )
   |                     # or,
      \. \d+               # Dot, digits 
 )
 $
 ^ 
 -?
 (?:
      \d+                  # Digits 
      \. \d*               # Dot, optional digits 
   |                     # or,
      \. \d+               # Dot, digits 
 )
 $

你需要点后正好两个数字,或者任意数量的数字吗?@vlaz两边可以有任意数量的数字,所以
是有效的输入吗?@IngoBürk是的,在
模式测试(“0.0”)
上它是get
false
。你的代码可以工作。你需要点后正好两个数字,还是任意数量的数字?@vlaz两边都可以有任意数量的数字所以
是有效的输入吗?@IngoBürk是的,在
模式上它是get
false
。测试(“0.0”)
。你的代码行得通。
(…)+
对于分隔符之前的零件有什么意义?很好!很好的观察结果我跳过了分隔符之前的零件的
(…)+
有什么意义?很好!很好的观察,我跳过了