[英]Angular Directive for input Numbers only
我正在創建一個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 = ''
}
字段: 字段
只需在/[^0-9]+/g
添加一個替代^0+
即可刪除前導零:
var transformedInput = inputValue.replace(/^0+|[^0-9]+/g, '');
// ^^^
參見更新的小提琴 。
^0+
與字符串開頭( ^
)處的1個或多個( +
)零匹配。
我找到了這個工作的小提琴 (不是我創造的)。 希望這可以幫助。
指示:
fessmodule.directive('format', ['$filter', function ($filter) {
return {
require: '?ngModel',
link: function (scope, elem, attrs, ctrl) {
if (!ctrl) return;
ctrl.$formatters.unshift(function (a) {
return $filter(attrs.format)(ctrl.$modelValue)
});
ctrl.$parsers.unshift(function (viewValue) {
var plainNumber = viewValue.replace(/[^\d|\-+|\.+]/g, '');
elem.val($filter(attrs.format)(plainNumber));
return plainNumber;
});
}
};
}]);
PS我還沒有測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.