2015-10-20 159 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連接成一行。