只有一个点“。”正则表达式

时间:2015-05-05 20:09:44

标签: javascript regex angularjs

我需要设置输入才能只放置数字和一个点,例如111.111而不是111..110....1111.11.11.11

这是因为我正在进行计算,如果用户在同一输入中输入多个点,则计算停止,我在指令中有这个

.directive('numbersOnly', function () {
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function (scope, element, attrs, ngModelCtrl) {
      ngModelCtrl.$parsers.push(function (inputValue) {
        var transformedInput = inputValue.replace(/[^0-9\.]+/g, '');
        if (transformedInput !== inputValue) {
          ngModelCtrl.$setViewValue(transformedInput);
          ngModelCtrl.$render();
        }
        return transformedInput;
      });
    }
  }
})

所以我该怎么办

var transformedInput = inputValue.replace(/[^0-9\.]+/g, '');

更新

这是我尝试使用它的代码:https://jsfiddle.net/dado1ynj/4/

4 个答案:

答案 0 :(得分:5)

使用前瞻:

^(?!.*\..*\.)(\d+\.\d+)

Demo

或锚点:

^(\d+\.\d+)$

Demo2

答案 1 :(得分:3)

嗯,这取决于你接受的格式是什么。 使用/^(\d)(.)?(\d)$/将帮助您确保数字中只有一个点,但也接受没有小数点的数字或只是小数点。您也可以使用isNaN()来确保它是一个数字。

希望它适合你。

答案 2 :(得分:2)

我建议只测试1个以上的点。示例

(string.test(/\d\.\.?(\.+)/gm)) ? //do true : // do false;

test检查字符串中是否存在,然后返回true或false。

正则表达式检查一个数字然后两个点或两个点+。它检查全局和多行。

然后,如果您坚持使用正则表达式来检查由一个点分隔的三个三位数组,则可以使用正则表达式

/(\d{3}\.\d{3}\.\d{3})\b/gm

此处示例:http://regexr.com/3auj5

答案 3 :(得分:2)

不是最优雅的解决方案,但它会根据用户类型检查输入,并且只允许带有一个小数的数字。

 link: function (scope, element, attrs, ngModelCtrl) {
        scope.currentValue = '';
        element.bind('keyup',function(e) {
            if( e.which!=8 && e.which!=0 && e.which!=46 && e.which != 190 && (e.which<48 || e.which>57)) {
                element.val(scope.currentValue);
            }
            if(e.which != 8 && e.which != 0) {
                var valToCheck = element.val();

                var r = /^(\d*)\.{0,1}(\d*)$/
                if (!r.test(valToCheck)) {
                    element.val(scope.currentValue);
                } else {
                    scope.currentValue = element.val();
                }

            }


        });

这个问题就是你看到一个字母中的用户类型,然后你看到它消失了。使用“keypress”而不是“keyup”可以更好地工作,但是你必须考虑用户在当前输入值的中间某处单击鼠标,然后键入以便它变得棘手。