正则表达式仍然允许最后的小数

时间:2016-09-14 21:22:17

标签: javascript angularjs regex

嘿所有人我正在以角度工作,我正在尝试创建一个过滤器,只允许格式为"any amount of digits . any amount of digits"的数字,否则会阻止输入,如果它不是[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();
        }
    }
};

3 个答案:

答案 0 :(得分:2)

我会引用一个由人写的article on floating point and regex,比我聪明。这是正则表达式建议:

^[-+]?[0-9]*\.?[0-9]+$     

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

开头

See this in regex101

var regex = /^[-+]?[0-9]*\.?[0-9]+$/;

var test = function(input) {
  console.log("Testing ["+ input + "]. Result: " + (regex.test(input) ? "passes" : "fails"));
}

//valid
test("1");
test("2.1");
test("3.14");
test("-4");
test("+5");
test(".6");
test("-.7");
test("+.8");

//invalid
test(""); // yes - empty string
test(".");
test("-");
test("+");
test("-.");
test("+.");
test("9.");
test("10..1");
test("11.1.2");
test(".12.1");
test("..13");
test("-.14.");
test("+..15");

答案 1 :(得分:0)

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

试试这个

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

答案 2 :(得分:0)

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

这不需要点

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

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

这需要一个点

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

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