2016-05-12 5 views
0

ここでは通貨のフィールドをフィルタリングするための指示があるため、ユーザーは入力するだけで小数点が暗示されます。数字とマイナス記号の書式設定ディレクティブのみを許可する

マイナスの数値を許可したい場合を除き、うまくいきます。

var plainNumber = viewValue.replace(/[^-+0-9]/g, ''); 

をこれを行うとディレクティブを破る:

http://plnkr.co/edit/qlZrc7dnZEUWzoNGyaF6?p=preview

私はこの行を取ることができると思うだろう。誰もこれを更新して数字とマイナス記号のみを許可する方法を知っていますか?

ですので、文字があるものはすべて7987hjhd.00のように置き換えられますが、-938.878937.34のように置き換えられます。

+0

あなたが許可および拒否したい番号についてより具体的にしてください。例を投稿する。 –

+0

@PedroLobitoの数字は0〜9で、負の記号 ' - 'は文字や記号などがありません。現在は、入力を負の符号なしの数字に制限しています。 – jenryb

+0

それは何も許されないことを知っている。 –

答えて

1

このコードでは、数値を取り、最後の2つの数値を小数としてフォーマットします。

+-と入力すると、記号が変わります。現在、+が表示されていますが、簡単に変更できます。

なぜあなたは私が何を意味するか見るためにそれをしようとしないでください:

var app = angular.module('App', []); 
 

 
app.controller('MainCtrl', function($scope) {}); 
 

 
app.directive('inputRestrictor', [ 
 
    function() { 
 
    return { 
 
     restrict: 'A', 
 
     require: 'ngModel', 
 
     link: function(scope, element, attr, ngModelCtrl) { 
 
     // Matches characters that aren't `0-9`, `.`, `+`, or `-` 
 
     var pattern = /[^.0-9+-]/g; 
 
     
 

 
     function fromUser(text) { 
 
      var rep = /[+]/g; // find + symbol (globally) 
 
      var rem = /[-]/g; // find - symbol (globally) 
 
      rep.exec(text); 
 
      rem.exec(text); 
 

 
      // Find last index of each sign 
 
      // The most recently typed characters are last 
 
      var indexp = rep.lastIndex; 
 
      var indexm = rem.lastIndex; 
 

 
      // remove formatting, and add it back later 
 
      text = text.replace(/[+.-]/g, ''); 
 
      if (indexp > 0 || indexm > 0) {// Are there signs? 
 
      if (indexp > indexm){ // plus sign typed later? 
 
       text = "+" + text; 
 
      } else text = "-" + text; 
 
      } 
 

 
      var transformedInput = text.replace(pattern, ''); 
 
      transformedInput = transformedInput.replace(
 
      /([0-9]{1,2}$)/, ".$1" // make last 1 or 2 digits the decimal 
 
     ) 
 
      ngModelCtrl.$setViewValue(transformedInput); 
 
      ngModelCtrl.$render(); 
 
      return transformedInput; 
 
     } 
 
     ngModelCtrl.$parsers.push(fromUser); 
 
     } 
 
    }; 
 
    } 
 
]);
<!DOCTYPE html> 
 
<html> 
 

 
    <head> 
 
    <script data-require="[email protected]" data-semver="1.3.0-rc.2" src=" https://code.angularjs.org/1.3.0-rc.2/angular.js"></script> 
 
    <link rel="stylesheet" href="style.css" /> 
 
    <script src="script.js"></script> 
 
    </head> 
 

 
    <body ng-app="App"> 
 
    <div ng-controller="MainCtrl"> 
 
     <input type="text" ng-model="inputValue" input-restrictor> 
 
     <input type="submit" ng-click="getdata()" /> 
 
    </div> 
 
    </body> 
 

 
</html>

+0

私はこれを好きです。一つのことは一度ネガティブとポジティブの間を入れ替えることができますが、前後に切り替えることはできません。 – jenryb

+1

@jenrybどういう意味ですか?私は変更したい記号を入力して前後に切り替えることができます。たとえば、 '+ - + - + - 'と入力すると、2つの間で切り替わります。 – Laurel

+0

私の悪い、私はプラス記号をタイプすることからシフトを押さえていた。これはいいです、私は '+'を取り出し、それは私のために働く。ありがとうございます – jenryb

関連する問題