通过过滤器应用通用掩码?

Apply generic mask via filter?

我目前正在使用 ngMask 来处理用户输入的屏蔽。效果很好,但是据我所知,只能用于 input 元素。我现在需要屏蔽这些相同的数据以供显示。例如,在 table 中,我希望将 item.ssn = 123456789 显示为 123-45-6798

最好的方法是什么?我知道我可以制作自定义过滤器,但想知道是否有一种通用方法可以对所有文本执行此操作。如果您可以扩展 ngMask 功能,就像这样...

<td><span mask="999-99-9999">{{item.ssn}}</span></td>

或作为过滤器...

<td>{{item.ssn|filter:'999-99-9999'}}</td>

看看 date filter. you pretty much need to implement the same but for strings. You can use source code 以供参考。

在最简单的情况下,您可以使用简单的正则表达式替换:

angular.module('myModule').filter('ssn', function() {
  return function(text) {
    return (""+text).replace(/(\d\d\d)(\d\d)(\d\d\d\d)/, '--');
 }
})

<td>{{item.ssn|ssn}}</td>

您需要实施过滤器。您可以依赖 ngMask 提供的 MaskService

angular.module('myModule').filter('mask', ['MaskService', function(MaskService) {
  return function(text, mask) {
    var result, 
        maskService = MaskService.create(),

    if (!angular.isObject(mask)) {
      mask = { mask: mask }
    }

    maskService.generateRegex(mask).then(function() {
      result = maskService.getViewValue(text).withDivisors() 
    }

    return result;
  }
}])

然后:

<td>{{item.ssn | mask:'999-99-9999'}}</td>

适合我。关注

https://github.com/alairjt/displayMask

<span>{{'01234567890' | mask:'999.999.999-99'}}</span>

//012.345.678-90

只需使用AngularJS

{{youdate | date : "dd.MM.y"}}

参考:https://docs.angularjs.org/api/ng/filter/date