javascript +正则表达式

julioVG

我有个问题。我想使用一个正则表达式,让我仅介绍数字和“。”。(用于十进制)输入字段上,没有字母和其他特殊字符。

我正在尝试:

选项1 => var restrict="[^\d+]"

选项2 => var restrict="[^\d+]"

iAttrs.restrict = ^(?![0-9]+([.]?[0-9]+))$

value.toLowerCase().replace(new RegExp(iAttrs.restrict, 'g'), '');

这个正则表达式是一个角度指令

appModule.directive('restrict', function($parse) {
        return {
            restrict: 'A',
            require: 'ngModel',
            link: function(scope, iElement, iAttrs, controller) {
                scope.$watch(iAttrs.ngModel, function(value) {
                    if (!value) {
                        return;
                    }
                    value = value.toString();
                    $parse(iAttrs.ngModel).assign(scope, value.toLowerCase().replace(new RegExp(iAttrs.restrict, 'g'), ''));
                });
            }
        }
    });

它必须删除写在输入上的错误字符。但是问题是

选项1 ==>不要让我写“。” 特点

选项2 ==>不要让我什么也不写(当我有一个默认值示例:“ 300.21”,它必须出现在输入字段上……在限制指令完成后,什么都没有写在输入上。

有人可以帮我吗?

谢谢

穆罕默德里亚斯

根据评论更新:

由于小数点的情况非常特殊,因此我为此创建了一个新指令。

指令代码:

angular.module("app",[]).directive('allowOnlyDecimal', function($parse) {
        return {
            restrict: 'A',
            require: 'ngModel',
            link: function(scope, iElement, iAttrs, controller) {
                // used to find out if more than one . is available 
                function nth_ocurrence(str, needle, nth) {
                  for (i=0;i<str.length;i++) {
                    if (str.charAt(i) == needle) {
                      if (!--nth) {
                         return i;    
                      }
                    }
                  }
                  return false;
                }

                scope.$watch(iAttrs.ngModel, function(value) {
                    if (!value) {
                        return;
                    }
                    value = value.toString();
                    var temp = value.replace(/[^(\d\.)]/gi, '');
                    // this removes any special character and alphabets
                    if(nth_ocurrence(temp,".",2)) {
                      temp = temp.substr(0, nth_ocurrence(temp,".",2));
                      // removes if user enters more than one decimal point
                    }
                    scope[iAttrs.ngModel] = temp;
                });
            }
        };
}).controller("MainController", function($scope) {
       $scope.someInput = 100.400;
});

在您的HTML中:

<input type="text" ng-model="someInput" allow-only-decimal>

工作演示

老答案:

这可能是更通用的方法,您可以使用正则表达式将其用于大多数限制功能。

HTML:

<input type="text" ng-model="someInput" restrict="[^(\d\.)]">

JS:

angular.module("app",[]).directive('restrict', function($parse, $timeout) {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function(scope, iElement, iAttrs, controller) {
            scope.$watch(iAttrs.ngModel, function(value) {
                if (!value) {
                    return;
                }
            value = value.toString();
            $timeout(function() {
               scope[iAttrs.ngModel] = value.replace(new RegExp(iAttrs.restrict,'gi'), '');


        },10);
            });
        }
    };
}).controller("MainController", function($scope) {
       $scope.someInput = 100.400;
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章