Chapter 2: Filters using complex regular expressions
by msfrisbie
HTML
<script src="https://code.angularjs.org/1.3.2/angular.min.js"></script>
<div ng-app="myApp">
<div ng-controller="Ctrl">
<input ng-model="search.name" placeholder="Name" required />
<input ng-model="search.number" placeholder="Number" required />
<p ng-repeat="user in users | filter:usermatch">
{{ user.firstName }} {{ user.lastName }}
</p>
</div>
</div>
JavaScript
angular.module('myApp', [])
.controller('Ctrl', function ($scope) {
$scope.users = [
{
firstName: 'John',
lastName: 'Stockton',
number: '12'
},
{
firstName: 'Michael',
lastName: 'Jordan',
number: '23'
},
{
firstName: 'Allen',
lastName: 'Iverson',
number: '3'
}
];
$scope.usermatch = function (user) {
if (!angular.isDefined(user) ||
!angular.isDefined($scope.search)) {
return false;
}
var nameMatch = false,
numberMatch = false;
if (angular.isDefined($scope.search.name) &&
$scope.search.name.length > 0) {
if (angular.isDefined(user.firstName)) {
nameMatch = nameMatch ||
user.firstName.indexOf($scope.search.name) > -1;
}
if (angular.isDefined(user.lastName)) {
nameMatch = nameMatch ||
user.lastName.indexOf($scope.search.name) > -1;
}
}
if (angular.isDefined(user.number) &&
angular.isDefined($scope.search.number)) {
numberMatch = user.number === $scope.search.number;
}
return nameMatch || numberMatch;
};
});