Các Mẫu Regex Mọi Lập Trình Viên Nên Thành Thạo
Regex (biểu thức chính quy) là một trong những công cụ mạnh mẽ nhất trong hộp công cụ của lập trình viên. Chúng cho phép bạn tìm kiếm, xác thực và chuyển đổi văn bản bằng các mẫu súc tích mà các thao tác bằng mã thủ tục có thể cần hàng chục dòng. Mặc dù cú pháp regex thoạt nhìn có vẻ khó hiểu, nhưng thành thạo một tập hợp mẫu cốt lõi sẽ bao phủ phần lớn các trường hợp sử dụng thực tế. Hướng dẫn này giới thiệu các mẫu regex bạn sẽ sử dụng lặp đi lặp lại, với giải thích chi tiết về cách mỗi mẫu hoạt động.
Ôn Tập Cơ Bản Về Regex
Trước khi đi sâu vào các mẫu cụ thể, đây là ôn tập nhanh về các metacharacter nền tảng tạo nên cơ sở của tất cả các mẫu regex:
| Metacharacter | Ý Nghĩa | Ví Dụ |
|---|---|---|
| . | Ký tự đơn bất kỳ | a.c khớp abc, a1c, a c |
| * | Ký tự trước không hoặc nhiều lần | ab*c khớp ac, abc, abbc |
| + | Ký tự trước một hoặc nhiều lần | ab+c khớp abc, abbc |
| ? | Ký tự trước không hoặc một lần | colou?r khớp color, colour |
| ^ | Đầu chuỗi | ^Hello khớp Hello ở đầu |
| $ | Cuối chuỗi | world$ khớp world ở cuối |
| [] | Lớp ký tự | [aeiou] khớp nguyên âm bất kỳ |
| () | Nhóm capture | (ab)+ khớp ab, abab |
| | | Luân phiên (hoặc) | cat|dog khớp cat hoặc dog |
| \d | Chữ số [0-9] | \d{3} khớp 123 |
| \w | Ký tự từ [a-zA-Z0-9_] | \w+ khớp hello_123 |
| \s | Ký tự khoảng trắng | a\sb khớp a b |
1. Xác Thực Email
Mẫu Email Cơ Bản
Mẫu này xác thực cấu trúc cơ bản của địa chỉ email: một hoặc nhiều ký tự được phép trước @, theo sau là tên miền chứa ít nhất một dấu chấm và TLD có hai chữ cái trở lên. Nó bắt hầu hết các định dạng không hợp lệ trong khi cho phép các địa chỉ hợp lệ vượt qua.
Khớp: user@example.com, john.doe+tag@company.co.uk
Không khớp: user@, @example.com, user@.com
2. Xác Thực URL
Mẫu URL HTTP/HTTPS
Mẫu này khớp URL HTTP và HTTPS với tiền tố www tùy chọn, chứa tên miền và đường dẫn tùy chọn. s? làm cho "s" trong https trở thành tùy chọn, (www\.)? làm cho tiền tố www trở thành tùy chọn. Phân đoạn đường dẫn (\/[^\s]*)? cho phép bất kỳ ký tự nào ngoại trừ khoảng trắng sau tên miền.
Khớp: https://example.com, http://www.example.com/path/to/page
Không khớp: ftp://example.com, example.com (không có giao thức)
3. Xác Thực Số Điện Thoại
Số Điện Thoại Quốc Tế
Mẫu này tuân theo định dạng số điện thoại quốc tế E.164. Nó cho phép tiền tố + tùy chọn, yêu cầu chữ số đầu tiên là 1-9 (không có số 0 đứng đầu) và cho phép tối đa 15 chữ số. Đây là định dạng đáng tin cậy nhất để lưu trữ và xác thực số điện thoại quốc tế.
Khớp: +14155552671, 442071838750
Không khớp: +01xxxxxxxxx, 123
4. Độ Mạnh Mật Khẩu
Mẫu Mật Khẩu Mạnh
Mẫu này thực thi chính sách mật khẩu mạnh: ít nhất 8 ký tự, chứa ít nhất một chữ thường, một chữ hoa, một chữ số và một ký tự đặc biệt. Cú pháp (?=.*[...]) sử dụng positive lookahead để kiểm tra sự hiện diện của từng loại ký tự mà không tiêu thụ ký tự.
Khớp: MyP@ss1word, Str0ng!Pass
Không khớp: password, Password1, P@ss
5. Xác Thực Địa Chỉ IP
Địa Chỉ IPv4
Mẫu này xác thực địa chỉ IPv4 với kiểm tra phạm vi chính xác. Mỗi octet phải nằm trong khoảng từ 0 đến 255. Mẫu sử dụng luân phiên để khớp: 250-255 (25[0-5]), 200-249 (2[0-4]\d) hoặc 0-199 ([01]?\d\d?). Điều này được lặp lại ba lần sau ba dấu chấm, sau đó một lần cuối cho octet cuối cùng.
Khớp: 192.168.1.1, 10.0.0.1, 255.255.255.0
Không khớp: 256.1.1.1, 192.168.1, 192.168.1.1.1
6. Xác Thực Định Dạng Ngày Tháng
YYYY-MM-DD (ISO 8601)
Mẫu này xác thực ngày tháng ở định dạng ISO 8601 (YYYY-MM-DD). Nó kiểm tra năm bốn chữ số, tháng từ 01-12 và ngày từ 01-31. Lưu ý rằng mẫu này xác thực định dạng nhưng không xác thực tính hợp lệ logic của ngày (ví dụ: nó cho phép 2026-02-31). Để xác thực đầy đủ, hãy phân tích cú pháp ngày và kiểm tra theo chương trình.
Khớp: 2026-05-20, 2025-01-01, 2024-12-31
Không khớp: 2026-5-20, 2026-13-01, 26-05-20
7. Mã Màu Hex
Màu Hex CSS
Mẫu này khớp mã màu hex CSS, bao gồm định dạng rút gọn 3 chữ số (#fff) và định dạng đầy đủ 6 chữ số (#ffffff). Lượng từ {1,2} cho phép 1 hoặc 2 lần lặp của nhóm 3 chữ số hex, hỗ trợ cả hai định dạng.
Khớp: #fff, #FF5733, #1e293b
Không khớp: fff, #ff, #1234567
8. Slug / Chuỗi An Toàn Cho URL
Mẫu URL Slug
Mẫu này xác thực URL slug: chuỗi chữ và số viết thường được phân tách bằng dấu gạch nối. Nó đảm bảo không có dấu gạch nối ở đầu hoặc cuối và không có dấu gạch nối liên tiếp. Định dạng này thân thiện với SEO và an toàn để sử dụng trong URL, tên tệp và định danh.
Khớp: my-blog-post, regex-patterns-guide, tool123
Không khớp: My-Post, -slug, slug-, my--post
9. Số Thẻ Tín Dụng
Mẫu Thẻ Tín Dụng Chung
Mẫu này xác thực số thẻ tín dụng chính: Visa (bắt đầu bằng 4, 13 hoặc 16 chữ số), Mastercard (bắt đầu bằng 51-55, 16 chữ số), American Express (bắt đầu bằng 34 hoặc 37, 15 chữ số) và Discover (bắt đầu bằng 6011 hoặc 65, 16 chữ số). Kết hợp với thuật toán Luhn để xác thực đầy đủ.
10. Khớp Thẻ HTML
Trích Xuất Thẻ HTML
Mẫu này khớp thẻ HTML mở và đóng với nội dung. Nhóm capture đầu tiên ([a-z][a-z0-9]*) bắt tên thẻ, backreference \1 đảm bảo thẻ đóng khớp với thẻ mở. (.*?) sử dụng khớp lười biếng để bắt nội dung giữa các thẻ với kết quả khớp ngắn nhất.
Mẹo Viết Regex Tốt Hơn
- Bắt đầu đơn giản: viết phiên bản cơ bản nhất của mẫu trước, sau đó tăng dần độ phức tạp. Kiểm tra ở mỗi bước.
- Sử dụng lớp ký tự: [a-z] rõ ràng hơn (a|b|c|...|z). Các lớp được đặt tên như \d, \w và \s cải thiện khả năng đọc.
- Ưu tiên lượng từ lười biếng: khi bạn cần khớp ngắn nhất, sử dụng *? và +? thay vì * và + để tránh khớp quá mức tham lam.
- Sử dụng neo: mẫu xác thực luôn sử dụng ^ và $ để đảm bảo toàn bộ chuỗi khớp, không chỉ chuỗi con.
- Tránh catastrophic backtracking: lượng từ lồng nhau như (a+)+ có thể gây độ phức tạp thời gian theo cấp số nhân với một số đầu vào. Sử dụng atomic group hoặc possessive quantifier khi có sẵn.
- Chú thích mẫu phức tạp: sử dụng cờ x (verbose mode) để thêm dấu cách và chú thích cho mẫu phức tạp.
Bạn muốn kiểm tra tương tác các mẫu regex này? Hãy thử công cụ kiểm tra regex miễn phí của chúng tôi, hỗ trợ khớp thời gian thực, trực quan hóa nhóm capture và giải thích mẫu.
Kiểm Tra RegexCâu Hỏi Thường Gặp
Mẫu regex là gì?
Mẫu regex là chuỗi ký tự định nghĩa mẫu tìm kiếm. Nó được sử dụng để khớp chuỗi, xác thực, thao tác tìm kiếm thay thế và phân tích cú pháp văn bản. Mẫu regex sử dụng các metacharacter đặc biệt như ., *, +, ?, [], () và {} để định nghĩa quy tắc khớp linh hoạt.
Tôi có nên dùng regex để xác thực email không?
Sử dụng regex để xác thực định dạng email cơ bản (kiểm tra ký hiệu @, cấu trúc tên miền), nhưng đừng cố xác thực đầy đủ địa chỉ email chỉ bằng regex. Đặc tả email (RFC 5322) cực kỳ phức tạp và không có regex nào có thể xác thực hoàn hảo tất cả địa chỉ hợp lệ. Trong môi trường production, kết hợp xác thực regex cơ bản với xác thực email thực tế (gửi liên kết xác nhận).
Sự khác biệt giữa lượng từ tham lam và lười biếng là gì?
Lượng từ tham lam (*, +) khớp càng nhiều văn bản càng tốt, trong khi lượng từ lười biếng (*?, +?) khớp càng ít văn bản càng tốt. Ví dụ, khi áp dụng cho 'aabb', mẫu tham lam a.*b khớp 'aabb' (toàn bộ chuỗi), trong khi mẫu lười biếng a.*?b chỉ khớp 'aab' (khớp ngắn nhất).
Làm thế nào để kiểm tra mẫu regex?
Sử dụng công cụ kiểm tra regex trực tuyến (như ToolHub regex tester) để kiểm tra mẫu một cách tương tác. Các công cụ này làm nổi bật kết quả khớp theo thời gian thực, hiển thị nhóm capture và giải thích chức năng của từng phần trong mẫu.
Regex có giống nhau giữa các ngôn ngữ lập trình không?
Hầu hết cú pháp regex được chia sẻ giữa các ngôn ngữ, nhưng các tính năng nâng cao có sự khác biệt. JavaScript không hỗ trợ lookbehind assertion trong các engine cũ, Python sử dụng cú pháp named group khác với JavaScript, và PCRE (PHP) hỗ trợ nhiều tính năng hơn hầu hết các engine khác. Luôn kiểm tra mẫu trong ngôn ngữ mục tiêu.