文本框不接受仅适用于JPY货币的小数值

时间:2015-09-15 07:17:45

标签: angularjs

我已经对金额进行了文本框验证,只接受数字或十进制数。它工作正常,但问题是我不希望在JPY货币的情况下进行此验证,因为在文本框中不应接受小数我想知道如何为一种货币实现这一目标。 我已经使用自定义指令进行输入字段验证。请看一下。

请帮忙。

.directive('allowOnlyDigits', function () {
  return {
    require: '?ngModel',
    link: function(scope, element, attrs, ngModelCtrl) {
      if(!ngModelCtrl) {
        return; 
      }

      ngModelCtrl.$parsers.push(function(val) {
        if (angular.isUndefined(val)) {
            var val = '';
        }
        var clean = val.replace(/[^0-9\.]/g, '');
        var decimalCheck = clean.split('.');

        if(!angular.isUndefined(decimalCheck[1])) {
            decimalCheck[1] = decimalCheck[1].slice(0,2);
            clean = decimalCheck[0] + '.' + decimalCheck[1];
        }

        if (val !== clean) {
          ngModelCtrl.$setViewValue(clean);
          ngModelCtrl.$render();
        }
        return clean;
      });

      element.bind('keypress', function(event) {
        if(event.keyCode === 32) {
          event.preventDefault();
        }
      });
    }
  };
})

1 个答案:

答案 0 :(得分:0)

您可以添加一个属性来检查货币。

.directive('allowOnlyDigits', function() {
    return {
        require: '?ngModel',
        link: function(scope, element, attrs, ngModelCtrl) {
            if (!ngModelCtrl) {
                return;
            }

            ngModelCtrl.$validators.onlyDigits = function(modelValue, viewValue) {
                var value = modelValue || viewValue;

                if (attrs['currency'] !== 'JPY') {
                    return /^\d*(?:\.\d{2}){0,1}$/.test(value);
                } else {
                   return /^\d*$/.test(value); 
                }
            };

            element.bind('keypress', function(event) {
                if (event.keyCode === 32) {
                    event.preventDefault();
                }
            });
        }
    };
});

在HTML中:

<input type ='text' ng-model='model' currency='JPY' allow-only-digits>