2016-05-12 72 views
0

以下是用於過濾貨幣字段的指令,因此用戶只需鍵入並暗示小數。只允許貨幣格式指示中的數字和負號

它運作良好,除了我想允許負數。

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

,我覺得我可以拿出這條線:

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

但是這樣做打破了指令。任何人都知道如何更新這個只允許數字和負號?

所以任何帶有字母的東西都會被替換爲7987hjhd.00,但-938.878937.34將被允許。

+0

請具體談談您要允許和拒絕的數字。發佈示例。 –

+0

@PedroLobito數字0-9和負號' - '沒有字母,符號等。現在它將輸入限制爲僅帶有負號的數字。 – jenryb

+0

知道它不允許任何東西。 –

回答

1

此代碼將最後兩個數字的數字和格式設置爲小數。

打字+-更改標誌。目前,它顯示+,但可以很容易地更改。

你爲什麼不嘗試一下,看看我的意思是:

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你是什麼意思?我可以通過輸入任何我想改變的符號來回切換。例如,鍵入:'+ - + - + - '將在兩者之間切換。 – Laurel

+0

我的不好,我正在按住加號的位置。這很好,我會拿出'+',它適用於我。謝謝 – jenryb