Под специальными символами я предполагаю, что вы имеете в виду все нечисловые c и не алфавитные c символы. В этом случае вы можете удалить специальные символы, прежде чем они будут использованы для фильтрации, с помощью простого регулярного выражения, например searchTerm = searchTerm.replace(/[^a-zA-Z0-9 ]/g, "");
.
Простой Stackblitz .
Шаблон:
<h5>Select:</h5>
<ng-select [items]="items$ | async"
bindLabel="name"
bindValue="name"
[closeOnSelect]="true"
[multiple]="true"
[hideSelected]="true"
[typeahead]="input$">
</ng-select>
Компонент:
export class AppComponent {
public items$: Observable<Person[]>;
public input$ = new Subject<string | null>();
constructor() {
this.input$.subscribe((typeahead) => {
console.log(typeahead);
});
this.items$ = this.input$.pipe(
map((term) => this.searchPeople(term))
)
}
private searchPeople(term: string | null): Person[] {
let searchTerm = term ? term : '';
searchTerm = searchTerm.replace(/[^a-zA-Z0-9 ]/g, "");
return [
{ name: 'Jack Doe' },
{ name: 'Jonathan Hammond' },
{ name: 'Lindsay Johann' },
].filter((person) => {
return person.name.toLowerCase().startsWith(searchTerm.toLowerCase());
});
}
}
Обратите внимание, что включен только один символ пробела (после 0-9
). Поэтому, если их больше одного, фильтр не будет работать и предложений не будет.
Пример : ввод jona!@#$%^&than hamm*}|"ond
все равно будет предлагать Джонатан Хаммонд . Однако ввод jona!@#$%^ &than hamm*}|"ond
(обратите внимание на пробел между ^ и &) ничего не даст.
Пример приложения разветвляется от здесь .