【发布时间】: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