0

0 から 1 までの 10 進数を許可する AngularJS のディレクティブが必要です。さらに、「-1」も許可できます。

例: -1 は有効 0 は有効 1 は有効 0.12 は有効 0.99 は有効 1.01 は無効

提案があれば教えてください。ありがとうございました。

4

1 に答える 1

7

OK、新しい値が有効でない場合にユーザー入力を無視するディレクティブを作成しました。0.またはのような部分的に書かれたテキストを許可します-。正確な動作は簡単に変更できます。現在、RegExp を使用して、入力が数値であるかどうかを調べ、この数値が -1 であるか、0 と 1 の間であるかをテストします。また、空の文字列または-.

app.directive('allowZeroToOne',function(){
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, el, attrs, ngModelCtrl){
      function fromUser(text) {
        var old = ngModelCtrl.$modelValue;
        var f = parseFloat(text);
        if(RegExp(/^(-?0*\d(\.\d*)?)$/).test(text) && (f===-1 || (f >= 0 && f <= 1)) || text==='' || text==='-') {
          return text;
        }else{
          ngModelCtrl.$setViewValue(old);
          ngModelCtrl.$render();
          return old;
        }
      }
      ngModelCtrl.$parsers.push(fromUser);
    }
  }
});

ああ、今では任意の精度が許可されています (したがって、0.111... も有効です)。2 桁だけが必要な場合は\d*、RegExp を に変更し\d{0,2}ます。plunkr の作業: http://plnkr.co/edit/xjx2dzVAJ0gM6j9Jbxrq

ちょっとやり過ぎかもしれませんが、作っていて楽しかったです。

于 2013-10-15T19:59:40.997 に答える