我需要只允许具有以下限制的数字的Angularjs指令: Exa:输入框仅接受小于99.99的值
输入框不能接受小数点前2个数字,小数点后不能接受2个数字
答案 0 :(得分:0)
ngPattern
您可以使用ngPattern
来实现这一目标,因为dd.dd
可以达到的最大数量为99.99
,因此您可以使用正则表达式对其进行验证。
这个正则表达式将完成工作^\d{1,2}(\.\d{0,2})?$
。这样您就可以在输入中使用ngPattern
,如下所示:
<input type="text" ng-model="model" name="input" ng-pattern="^\d{1,2}(\.\d{0,2})?$" />
此外,您可以实现适用于角形式的ngMax directive
并接受绑定值,以便您可以从模型中提供它。
app.directive('ngMax', function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, elem, attr, ctrl) {
scope.$watch(attr.ngMax, function () {
ctrl.$setViewValue(ctrl.$viewValue);
});
var maxValidator = function (value) {
var max = scope.$eval(attr.ngMax) || Infinity;
if (!isEmpty(value) && value > max) {
ctrl.$setValidity('ngMax', false);
return undefined;
} else {
ctrl.$setValidity('ngMax', true);
return value;
}
};
ctrl.$parsers.push(maxValidator);
ctrl.$formatters.push(maxValidator);
}
};
});
然后你可以像angularjs的常规验证指令一样使用它:
<input type="text" ng-model="model" id="input" name="input" ng-max="99.99" />
关于Javascript编号的注意事项,由于javascript舍入坑落,上述指令将因
99.99000000000001
之类的数字而失败。因此,尽管99.99000000000001
大于99.00
,但它会在表单上生成valid
。
答案 1 :(得分:0)
我没有执行这些特定规则的规则,但创建一个规则非常简单。既然你说了指令,我认为你在谈论AngularJS。
这是一个处理用户输入的指令片段。你的工作是创建规则并返回你想要的。您还可以执行警报,模态等,让用户了解错误或使用新值完全替换文本(根据您的规则)。
your_rules_are_not_met 变量将检查您是否需要进行更改。如果不这样做,则返回用户的文本。
如果您确实进行了更改,请确保在下次更改时不会使检查失败(每次更改都会调用该方法两次 - 一次用于初始检查,一次用新值检查)。因此,如果您返回失败的文字,您将 StackOverflow
在此示例中,51到75之间的数字将返回99.25。
angular.module("app", []);
angular.module("app").directive("controlme", function()
{
return {
require:"ngModel",
link: function(scope, elem, attrs, modelCtrl) {
modelCtrl.$parsers.push(function(text){
var myFloat = text * 1;
console.log(myFloat);
var your_rules_are_not_met = (myFloat > 50 && myFloat < 76);
if (your_rules_are_not_met) {
var newValue = 99.25;
modelCtrl.$setViewValue(newValue);
modelCtrl.$render();
return newValue;
}
return myFloat;
});
}
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="app">
<h2>Your Number is :{{my_data}}</h2>
<input type="text" ng-model="my_data" controlme />
</body>