javascript - 正则表达式仍然允许末尾有小数

标签 javascript angularjs regex

嘿大家,我正在 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]+但您还允许使用更多数字和可选的点字符。正则表达式还允许数字以 + 开头。或-

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

关于javascript - 正则表达式仍然允许末尾有小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39499830/

相关文章:

javascript - 使用javascript在不使用循环的情况下搜索对象中的数组

javascript - 经过中心时动画流畅

javascript - Angular : passing data to directive during compile

regex - Haskell 正则表达式语法

regex - R - 将可变数量的空格插入邮政编码字符串

javascript - 幻灯片修复和计时器

javascript - 是否可以创建一个 Chrome 扩展程序来执行属于正在浏览的页面的 javascript 函数?

javascript - 等待所有 http GET 请求完成后再在 JS 中登录到控制台

ruby-on-rails - 可以自动将我所有的js包含在index.html中吗?

c++ - 在 cpp 中按正则表达式拆分字符串 --special case