Để chặn việc nhập kí tự đặc biệt trong Angular, bạn có thể sử dụng Directive. Directive cho phép bạn thay đổi cách mà các thành phần DOM (Document Object Model) trong ứng dụng Angular của bạn hoạt động (tìm hiểu về Built-in directives).
Table of Contents
Dưới đây là cách tạo một Directive đơn giản để chặn ký tự đặc biệt trong Angular trong các trường nhập liệu của bạn:
Tạo Directive mới bằng cách sử dụng Angular CLI:
ng generate directive specialCharacterFilter
Sau khi thực hiện lệnh trên, Angular CLI sẽ tạo ra một Directive mới có tên specialCharacterFilter
.
Thêm mã để chặn ký tự đặc biệt trong Angular
Mở file special-character-filter.directive.ts
:
import { Directive, ElementRef, HostListener } from '@angular/core';
@Directive({
selector: '[appSpecialCharacterFilter]'
})
export class SpecialCharacterFilterDirective {
constructor(private el: ElementRef) { }
@HostListener('input', ['$event']) onInputChange(event: KeyboardEvent) {
const inputElement = event.target as HTMLInputElement;
const sanitizedValue = this.sanitizeInput(inputElement.value);
if (sanitizedValue !== inputElement.value) {
inputElement.value = sanitizedValue;
}
}
private sanitizeInput(input: string): string {
// Chặn các ký tự đặc biệt bằng cách sử dụng biểu thức chính quy
const sanitizedValue = input.replace(/[^\w\s]/gi, '');
return sanitizedValue;
}
}
Trong Directive trên, chúng ta đã sử dụng @HostListener
để lắng nghe sự kiện input
trên các trường nhập liệu. Khi sự kiện này xảy ra, chúng ta kiểm tra giá trị đầu vào và loại bỏ tất cả các ký tự đặc biệt sử dụng biểu thức chính quy RegExp (/[^\w\s]/gi
).
Sử dụng Directive trong template của component:
<input type="text" appSpecialCharacterFilter>
Bây giờ, khi người dùng nhập các ký tự đặc biệt vào trường input, chúng sẽ tự động bị loại bỏ và không xuất hiện trong trường input.
Lưu ý rằng, Directive trên chỉ chặn các ký tự đặc biệt như dấu chấm, dấu phẩy, dấu cách, chấm than, v.v. Nếu bạn muốn chặn các loại ký tự khác, bạn có thể tùy chỉnh biểu thức chính quy trong phương thức sanitizeInput()
.