ToolHub
View All Posts

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ĩaVí 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ầnab*c khớp ac, abc, abbc
+Ký tự trước một hoặc nhiều lầnab+c khớp abc, abbc
?Ký tự trước không hoặc một lầncolou?r khớp color, colour
^Đầu chuỗi^Hello khớp Hello ở đầu
$Cuối chuỗiworld$ 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
\dChữ số [0-9]\d{3} khớp 123
\wKý tự từ [a-zA-Z0-9_]\w+ khớp hello_123
\sKý tự khoảng trắnga\sb khớp a b

1. Xác Thực Email

Mẫu Email Cơ Bản

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

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

Lưu ý quan trọng: không có regex nào có thể xác thực hoàn hảo tất cả địa chỉ email hợp lệ theo RFC 5322. Sử dụng mẫu này để kiểm tra định dạng cơ bản, sau đó xác thực địa chỉ bằng cách gửi email xác nhận. Đối với ứng dụng production, kết hợp xác thực regex với xác thực tên miền.

2. Xác Thực URL

Mẫu URL HTTP/HTTPS

^https?:\/\/(www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(\/[^\s]*)?$

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ế

^\+?[1-9]\d{1,14}$

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

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$

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

^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$

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)

^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$

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

^#(?:[0-9a-fA-F]{3}){1,2}$

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

^[a-z0-9]+(?:-[a-z0-9]+)*$

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

^(?:4\d{12}(?:\d{3})?|5[1-5]\d{14}|3[47]\d{13}|6(?:011|5\d{2})\d{12})$

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

<([a-z][a-z0-9]*)\b[^>]*>(.*?)<\/\1>

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ạ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 Regex

Câ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.