我正在关注一个基于官方文档的示例来验证float。我的附加要求是浮点值应介于-90到90之间。我添加了最小和最大字段,但仍然没有运气。
以下是代码:
HTML:
<body ng-app="form-example1">
<form name="form" class="css-form" novalidate>
<div>
Length (float):
<input type="text" ng-model="length" name="length" min="-90" max="90" smart-float />
{{length}}<br />
<span ng-show="form.length.$error.float">
This is not a valid float number!</span>
<span ng-show="form.length.$error.min || form.length.$error.max">
The value must be in range -90 to 90!</span>
</div>
JS:
var app = angular.module('form-example1', []);
var FLOAT_REGEXP = /^\-?\d+((\.|\,)\d+)?$/;
app.directive('smartFloat', function() {
return {
require: 'ngModel',
link: function(scope, elm, attrs, ctrl) {
ctrl.$parsers.unshift(function(viewValue) {
if (FLOAT_REGEXP.test(viewValue)) {
ctrl.$setValidity('float', true);
return parseFloat(viewValue.replace(',', '.'));
} else {
ctrl.$setValidity('float', false);
return undefined;
}
});
}
};
});
目前对最小和最大字段的验证无效。允许90但不允许任何高于此值(如90.12345不允许,允许90,允许89.9999,不允许-90.1)
答案 0 :(得分:4)
答案 1 :(得分:0)
<input type="text" name="number" smart-float>
app.directive('smartFloat', function() {
return {
restrict: 'A',
require: '?ngModel',
link: function(scope, element, attrs, modelCtrl) {
modelCtrl.$parsers.push(function(inputValue) {
if (inputValue == undefined) return '';
var transformedInput = inputValue.replace(/[^0-9.]/g, '');
if (transformedInput !== inputValue) {
modelCtrl.$setViewValue(transformedInput);
modelCtrl.$render();
}
return transformedInput;
});
}
};
});