【问题标题】:AngularJS: Filter by regexAngularJS:按正则表达式过滤
【发布时间】:2016-01-19 08:36:09
【问题描述】:

我想使用 AngularJS 过滤器按正则表达式过滤元素列表(用户将在输入搜索字段中键入一个正则表达式)。

我写了所有对我来说似乎必要的东西,但我无法使正则表达式正常工作。

这是我到目前为止所做的:

查看.html

<div ng-controller="listCtrl">
<input type="text" placeholder="search by any" ng-model="search.$">
<input type="text" placeholder="search by fist name" ng-model="search.fname">
<input type="text" placeholder="search by last name" ng-model="search.lname" >
<input type="text" placeholder="search by tel" ng-model="search.tel" >
<input type="text" placeholder="search by date" ng-model="search.date">
<table>
        <tr ng-repeat="user in users|regex : search as res">
           <td>{{user.fname}}</td>
            <td>{{user.lname.toUpperCase()}}</td>
            <td>{{user.tel}}</td>
            <td>{{user.date | date: 'EEE'}}</td>
        </tr>
        <tr ng-if="res.length < 1">
            <td>No elements found...</td>
        </t>
        </table>
</div>

app.js

...
app.filter('regex', function() {

  return function(input, property) {
   var patt;
   var field;
   var out = [];
   if(input === undefined || property === undefined) {
    return out;
  }

  angular.forEach(property, function(key, value) {
   patt = new RegExp(key);   
   field = value;
 });

  for (var i = 0; i < input.length; i++){
    if(patt.test(input[i][eval(field)]))
      out.push(input[i]);
  }      
  return out;
};
});
...

listCtrl 只会向$scope 添加一些元素。

这里有什么问题?

【问题讨论】:

  • 仅供参考,这必须是过滤数据最慢的解决方案之一
  • @Dalorzo 你能给我们一个好的解决方案来通过正则表达式过滤数据吗?
  • 是否要在每个字段中输入多个正则表达式?

标签: javascript regex angularjs search filter


【解决方案1】:

您应该能够调用一个函数作为您的 ng-repeat 过滤器表达式的一部分,即。

然后在你的控制器中你会有类似的东西:

    function textRegEx(row) {
         var regex = new RegExp("row");
         return regex.test(row)
    }

这是针对整行的。您必须对其进行调整以仅在其中一个领域上工作。我今天早些时候在这里发布了一个代码笔:http://codepen.io/anon/pen/yOjdJV?editors=1010,带有一个用于选择您可以适应的字段的下拉菜单。显然,如果您启用对多个字段的搜索,您可以将对 regex.test 的调用连接到一行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-27
    • 2018-11-24
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多