Wednesday, August 20, 2014

Lớp đối tượng RegEx và cách validate các form bằng javascript



Như bài viết Thẻ iframe và những lưu ý đã đề cập, trong javascript có sẵn một lớp đối tượng hàm RegEx cho phép chúng ta kiểm tra các chuỗi ký tự và validate một cách nhanh chóng mà không cần viết thêm các hàm xử lý chuỗi. Trong bài này chúng ta sẽ cùng tìm hiểu cơ chế RegEx và một số ứng dụng validate dữ liệu.

Trước hết chúng ta thử chạy đoạn code html sau đây:



Khi chạy chúng ta sẽ thấy là nếu chúng ta nhập vào chữ số hoặc ký tự đặc biệt, java sẽ cảnh báo bằng lệnh alert ở dòng 10. còn nếu nhập đúng tên thì chúng ta sẽ thấy chương trình cho ra một câu chào. Cơ chế làm việc của RegEx ở đây cũng giống như với các hàm PCRE của PHP chỉ khác một chút về cách trình bày, còn quy ước về mẫu tìm kiếm, so sánh thì như nhau.

Với java, bạn chỉ cần tạo ra một biến ký tự, trong ví dụ trên là filter và gán bằng chuỗi mẫu filter=/[a-zA-z]+$/

Sau đó bạn dùng một trong các phương thức sẵn có của đối tượng biến vừa tạo. Đó là .search(), .match(), .replace() hoặc .test()

.match() và .test() là hai phương thức ngược nhau. .match là phương thức của chuỗi tìm kiếm còn .test là phương thức của chuỗi mẫu (pattern). Hãy xem đoạn code dưới đây, so sánh với đoạn code trên thì bạn có thể tự rút ra kết luận:



Các điều kiện nằm ngoài / / của mẫu tìm kiếm cũng khá giống với PCRE, đó là:
i – tìm kiếm không phân biệt chữ hoa chữ thường
g – tìm kiếm từ đầu chuỗi đến cuối chuỗi

Ví dụ đoạn code sau đây in ra 3 chữ T,t,t vì có điều kiện i,g



Các điều kiện nằm bên trong / / cũng vậy:
^ – trả về kết quả nếu chuỗi mẫu được tìm thấy ở đầu chuỗi gốc
$ – trả về kết quả nếu chuỗi mẫu được tìm thấy ở cuối chuỗi gốc
w – tìm ký tự là chữ cái, chữ số hoặc dấu gạch dưới
d – tìm ký tự là chữ số
s – tìm ký tự là dấu cách

Chạy đoạn code sau đây bạn sẽ thấy rõ điều đó:



Chúng ta cũng có một số lệnh xác định số lần xuất hiện (lặp lại) của các ký tự tìm kiếm gần giống với PCRE
{x}: Lặp một ký tự hoặc một biểu thức con trước đó x lần
{x,y}: Lặp một ký tự hoặc một biểu thức con trước đó từ x đến y lần
{x,}: Lặp một ký tự hoặc một biểu thức con trước đó >= x lần
?: Lặp một ký tự hoặc một biểu thức con trước đó 0 hoặc 1 lần
*: Lặp một ký tự hoặc một biểu thức con trước đó >=0 lần
+: Lặp một ký tự hoặc một biểu thức con trước đó >=1 lần

Ví dụ minh họa dưới đây



Chúng ta có thể sử dụng các dấu ngoặc tròn () để gộp nhóm như trong các biểu thức toán học thông thường.

(): Tìm kiếm một nhóm các ký tự bên trong cặp dấu ngoặc và lưu vào chuỗi kết quả.
(?: ): Tìm kiếm chuỗi kết quả không chứa tập ký tự nằm trong cặp dấu ngoặc.
|: Phép toán hoặc, được sử dụng để kết hợp các mệnh đề với nhau vào chung một biểu thức

Ví dụ sau đây dùng () để tìm các địa chỉ email trong một chuỗi



Cuối cùng chúng ta thử sử dụng phương thức .replace để thay thế một mẫu trong chuỗi bằng ví dụ sau:

No comments:

Post a Comment