仅针对输入数字的角度指令

时间:2015-12-21 16:57:29

标签: javascript jquery html angularjs regex

我正在创建一个directive来限制输入框以仅接受数字。它应该接受1-9999999999,但没有前导0.它正在工作但输入第一个数字后它接受所有数字和字符。请帮我解决这个问题。它应该接受10,但不能接受01.对于我的代码是,

HTML:

<input type="text" ng-model="number" required="required" numbers-only="numbers-only" />

JS:

angular.module('myApp', []).directive('numbersOnly', function(){
   return {
     require: 'ngModel',
     link: function(scope, element, attrs, modelCtrl) {
       modelCtrl.$parsers.push(function (inputValue) {
           if (inputValue == undefined) return '' 
           var transformedInput = inputValue.replace(/^[^1-9]*/g, ''); 
           if (transformedInput!=inputValue) {
              modelCtrl.$setViewValue(transformedInput);
              modelCtrl.$render();
           }         

           return transformedInput;         
       });
     }
   };
});

function MyCtrl($scope) {
    $scope.number = ''
}

FIDDLE:FIDDLE

3 个答案:

答案 0 :(得分:3)

只需向^0+添加替代/[^0-9]+/g,即可删除前导零:

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

请参阅updated fiddle

^0+匹配字符串start(+)处的1个或多个(^)个零。

答案 1 :(得分:0)

我发现这有效fiddle(不是我创造的)。希望这会有所帮助。

指令:

TableView

P.S。我没有测试过。

答案 2 :(得分:0)

你需要从你的模式中删除第一个PointText。这是updated fiddle

使用此 -

^

您可以使用以下内容在开始updated fiddle -

时限制0
replace(/[^1-9]*/g, '');