Угловой 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...
Другие вопросы по тегам