Угловой 4-х регистронезависимый результат поиска с конвейером
Здравствуйте, я создаю поисковую трубу в angular4, которая фильтрует название компании из Json Data. Фильтр поиска работает, но чувствителен к регистру, как я могу игнорировать чувствительность к регистру из моего фильтра поиска. Я ставлю только код, который связан с предметом.
Код моей трубы -
import { Pipe, PipeTransform } from '@angular/core';
import { JobsService } from '../services/jobs.service';
@Pipe({
name: 'filter',
pure: false
})
export class FilterPipe implements PipeTransform {
transform(items: any[], term): any {
console.log('term', term);
return term
? items.filter(item => item.company.indexOf(term) != -1)
: items;
}
}
Поисковая строка -
<input type="text" [(ngModel)]="term" name="term">
Данные -
<div *ngFor="let joblist of jobList | filter: term">
{{joblist.company}}
</div>
2 ответа
Вы можете использовать String.protoype.search()
метод вместо indexOf()
метод проверки регулярного выражения без учета регистра.
Так что ваши return
Заявление может выглядеть так:
return term
? items.filter(item => item.company.search(new RegExp(term, 'i')) !== -1)
: items;
Если у вас есть специальные символы, такие как \
в вашем terms
переменная, то вам нужно учитывать это также в вашем фильтре. Вышеуказанный метод должен работать для обычного алфавитно-цифрового terms
переменная.
i
в new RegExp(term, 'i')
учитывает регистр символов terms
шаблон.
Приведенный выше код позволит в любой company
значения, которые имеют term
где-нибудь в этом. Если вы хотите более строгую проверку, вы можете заменить RegExp
конструктор с этим: new RegExp('^' + terms + '$', 'i')
в приведенном фрагменте кода. Эти персонажи, ^
& $
укажите 'начало' и 'конец' шаблона регулярного выражения соответственно.
Подробнее о поиске и регулярных выражениях.
Вы должны отфильтровать значение термина как:
...term.toLowerCase().company...