只允许一定数量的数字作为十进制整数和一定量的小数的函数

时间:2016-11-18 23:20:29

标签: javascript angularjs validation

我想知道你们是否可以帮助我在javascript中构建一个函数,该函数在keypress事件中执行,防止超过10位数作为整数,2位作为小数。

Correct format: 1234567890.12 (10 digits as integer and 2 decimal)
Wrong format: 123456778901.123 (11 digits as integer and 3 decimal)

如果用户输入超过10位数作为整数,则应返回false以不添加它,但如果已定义则保留2小数点。

我会自己做,但我没有想法:(

这就是我的尝试,但它从不让我尊重2小数点。

const theIntegerNumber = ($scope[ngModelName] - ($scope[ngModelName] % 1).toFixed(2)).toFixed(0);

if( theIntegerNumber.length >= 10){
    $scope[ngModelName] = parseFloat($scope[ngModelName]).toFixed(2);
    $event.preventDefault();
}
// I am using angular tho.

修改

<input ng-model="__incomeUnitAmount" ng-keypress="filterValueAcceptedData('__incomeUnitAmount', '__incomeUnitAmount_error_format', '10Digit2Decimal', $event);" type="text" name="incomeUnitAmount-amount"&GT;

1 个答案:

答案 0 :(得分:1)

使用正则表达式:

var regex = new RegExp("^\\d{0,10}\.\\d{2}$");

isValidFormat = function(str) {
  return regex.test(str);
}

console.log('%s: %s', '1234567890.10', isValidFormat("1234567890.10"));
console.log('%s: %s', '123456778901.123', isValidFormat("123456778901.123"));

修改

模式已更新为制作数字选项的点和小数部分(因为点和小数通常不会立即由用户输入)。

使用Angular,使用ng-pattern指令:

function formCtrl($scope){
    $scope.onSubmit = function(){
        alert("form submitted");
    }
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app>
<form name="myForm">
    <input type="text" ng-model="intValue" name="int_field" ng-pattern="/^\d{1,10}\.?\d{0,2}$/" required><br/>
    <span ng-show="myForm.int_field.$error.pattern">Not a valid number!</span><br/>
   <tt>myForm.price_field.$error.pattern = {{myForm.int_field.$error.pattern}}</tt><br/>

</form>
</div>