2016-05-12 44 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