1

I had a text field of type="text" but it is allowing e to be entered ..I even want to prevent that happening how can we do that?

  <input class="form-control" maxlength="12" ng-model="$ctrl.NumberInput" type="number"
   min="0" required focus>

Can someone help!

H Varma
  • 570
  • 4
  • 12
  • 29

2 Answers2

2

You can use the following directive which will restrict only for numbers

app.directive('validNumber', 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 negativeCheck = clean.split('-');
        var decimalCheck = clean.split('.');
        if(!angular.isUndefined(negativeCheck[1])) {
            negativeCheck[1] = negativeCheck[1].slice(0, negativeCheck[1].length);
            clean =negativeCheck[0] + '-' + negativeCheck[1];
            if(negativeCheck[0].length > 0) {
                clean =negativeCheck[0];
            }

        }

        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();
        }
      });
    }
  };
});

DEMO

If you do not want to use directive use ng-pattern

 <input type="text" ng-model="$ctrl.numberInput"   ng-pattern="/[^0-9]/g" required />

DEMO

Sajeetharan
  • 216,225
  • 63
  • 350
  • 396
2

you can try the easiest way : ng-pattern

 <input type="text" ng-model="$ctrl.numberInput"  ng-pattern="/^\d+$/" required />
xkeshav
  • 53,360
  • 44
  • 177
  • 245