Strip characters from ng-repeat filter?

Я пишу Угловое приложение, которое будет считывать карту магнитной полосы с USB-устройства. Когда я провожу тестовую карту,я получаю строку, содержащую номер карты. Например;12345?, где 12345находится номер карты.

Данные, которые использует мое приложение, не включают эти «управляющие символы», поэтому я хотел бы удалить их из строки поиска, если строка начинается с a ;и заканчивается a ?.

При написании настраиваемого фильтра:

angular.module('app.filters', [])

.filter('stripcardcontrolcharacters', function() {
  return function(text) {
    if(text.substring(0, 1) === ";" && text.substring(text.length - 1) === "?") {
        return text.substring(1, text.length - 1);
    }
  };
});

Это не удается, потому что я ng-repeating над массивом, а не строку, которую я искал.

Как получить строку, для которой я фильтрую, и удалить из нее символы?

EDIT: Current suggestion is to use a filter to modify the array to ADD in the control characters so filter:can find it. Я мог бы пойти с этим сейчас, но мне все еще интересно знать, можете ли вы написать такой фильтр

2 ответа

  1. Вы передаете весь массив в фильтр через

    ng-repeat="user in users | stripcardcontrolcharacters ...
    

    Если это то, как вы хотите, чтобы он работал, вам нужно было бы рассматривать его как массив, например

    return function(textArray) {
        var invalidChars = /\D/g; // just an example
        return textArray.map(text => {
            console.log(text);
            return text.replace(invalidChars, '');
        });
    }
    
  2. Вероятно, фильтр применяется к массиву, а не к самой строке.
    Посмотрите на этот пример:

    angular.module('test', [])
      .controller('testController', function($scope){
        $scope.names = ['John Doe', 'Jane Doe'];
      })
      // The test filter
      .filter('strip', function(){
        return function(str) {
          return str.substring(1, str.length - 1);
        };
      });
    

    И вот как его использовать:

    <body ng-app="test" ng-controller="testController">
        <p ng-repeat="name in names">
            {{name | strip }}
        </p>
    </body>
    

    Обратите внимание, что я применяю фильтр, где я использую значение, а не в ng-repeatинструкции.

    А вот рабочий планкер