嘿大家,我正在 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();
}
}
};
最佳答案
我将引用 article on floating point and regex这是由比我聪明得多的人写的。这是建议的正则表达式:
^[-+]?[0-9]*\.?[0-9]+$
还有一个解释 - 它定义了可选输入和强制输入。在这种情况下,您希望至少有一位数字,即最后的 [0-9]+
但您还允许使用更多数字和可选的点字符。正则表达式还允许数字以 +
开头。或-
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");
关于javascript - 正则表达式仍然允许末尾有小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39499830/