20 Mẫu Regex Thông Dụng Mà Mọi Lập Trình Viên Nên Biết
20 Mẫu Regex Thông Dụng Mà Mọi Lập Trình Viên Nên Biết
Regex giải quyết các vấn đề thực tế: xác thực dữ liệu đầu vào, trích xuất dữ liệu và biến đổi chuỗi. Hướng dẫn này trình bày 20 biểu thức chính quy sẵn sàng sử dụng bao phủ các tác vụ xử lý văn bản phổ biến nhất. Mỗi mẫu bao gồm giải thích về những gì nó khớp.
1. Địa chỉ Email
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
Phần tên người dùng (local part) cho phép chữ cái, chữ số, dấu chấm và ký tự đặc biệt. Phần tên miền (domain) cho phép chữ cái, chữ số và dấu chấm. TLD phải có ít nhất hai chữ cái.
2. URL
https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z]{2,}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)
Khớp các URL HTTP/HTTPS với www tùy chọn, tên miền, TLD, đường dẫn và chuỗi truy vấn.
3. Số Điện Thoại Mỹ
^\(?(\d{3})\)?[-.\s]?(\d{3})[-.\s]?(\d{4})$
Khớp (555) 123-4567, 555-123-4567, 555.123.4567 và 5551234567.
4. Điện Thoại Quốc Tế
^\+?(\d{1,3})\s?[-.\s]?\(?\d{1,4}\)?[-.\s]?\d{1,4}[-.\s]?\d{1,9}$
Mẫu linh hoạt cho số quốc tế với mã quốc gia.
5. Mật Khẩu Mạnh
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$
Yêu cầu 8+ ký tự, một chữ thường, một chữ hoa, một chữ số, một ký tự đặc biệt. Sử dụng các khẳng định nhìn trước (lookahead assertion).
6. Ngày Tháng (YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
Định dạng ISO 8601. Tháng 01-12, ngày 01-31. Không xác thực giới hạn theo từng tháng (30/02 vẫn vượt qua).
7. Ngày Tháng (MM/DD/YYYY)
^(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01])\/\d{4}$
Định dạng Mỹ với dấu gạch chéo.
8. Thời Gian (HH:MM 24 Giờ)
^([01]\d|2[0-3]):[0-5]\d$
Giờ 00-23, phút 00-59.
9. Địa Chỉ IPv4
^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$
Bốn octet. Để xác thực nghiêm ngặt (0-255), thay thế \d{1,3} bằng (25[0-5]|2[0-4]\d|[01]?\d\d?).
10. Địa Chỉ IPv6
^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$
IPv6 đầy đủ với 8 nhóm chữ số hex. Không xử lý dạng viết tắt ::.
11. Địa Chỉ MAC
^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$
Phân tách bằng dấu hai chấm hoặc dấu gạch nối.
12. Mã Màu Hex
^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
3 chữ số (#fff) hoặc 6 chữ số (#ffffff), không phân biệt hoa thường.
13. Số Thẻ Tín Dụng
^\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}$
16 chữ số với dấu phân cách tùy chọn. Không xác thực tổng kiểm tra Luhn.
14. Mã ZIP Mỹ
^\d{5}(-\d{4})?$
12345 hoặc 12345-6789.
15. Tên Người Dùng
^[a-zA-Z0-9_]{3,16}$
3-16 ký tự, chỉ gồm chữ cái, chữ số và dấu gạch dưới.
16. URL Slug
^[a-z0-9-]+$
Chữ thường, chữ số và dấu gạch nối. Phổ biến trong các hệ thống CMS.
17. Thẻ HTML
<\/?[\w\s]*>|<.+[\w\s]*>
Khớp các thẻ mở và thẻ đóng. Không phù hợp cho HTML lồng nhau.
18. Phần Mở Rộng Tệp
\.([a-zA-Z]{2,})$
Trích xuất phần mở rộng mà không có dấu chấm.
19. Chuẩn Hóa Khoảng Trắng
\s+
Gộp nhiều dấu cách, tab hoặc dòng mới thành một.
20. Trích Xuất Số
-?\d+(\.\d+)?
Số nguyên và số thập phân, bao gồm cả số âm.
Mẹo Hiệu Suất
- Hãy cụ thể — tránh
.*vì nó có thể gây quay lui thảm khốc (catastrophic backtracking). - Neo bằng
^và$để giới hạn phạm vi tìm kiếm. - Kiểm thử các trường hợp biên: chuỗi rỗng, chuỗi dài, ký tự đặc biệt.
Kiểm Thử Các Mẫu Này Trực Tuyến
Sử dụng công cụ regex tester để thử nghiệm với các mẫu này. Dán bất kỳ biểu thức nào, nhập văn bản mẫu và xem các kết quả khớp được tô sáng trong thời gian thực. Công cụ này hiển thị các nhóm bắt (capture group) và giúp gỡ lỗi các mẫu trước khi sử dụng.