2015-10-20 109 views
0

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

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

以下是我迄今所做的:

View.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

这里有什么问题?

+0

仅供参考这将是过滤数据最慢的解决方案之一 – Dalorzo

+0

@Dororzo你能给我们一个很好的解决方案,通过正则表达式来过滤数据吗? – Mitchapp

+0

你想在每个字段中输入多个正则表达式吗? – dfsq

回答

1

你应该能够调用一个函数作为你的ng-repeat过滤表达式的一部分,也就是说。

然后在你的控制器,你会碰到这样的:

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

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