Regex Generator - Tạo Regular Expression online miễn phí
Regex Generator của Tấn Phát Digital giúp tạo và thử nghiệm Regular Expression cho các nhu cầu phổ biến như email, URL, số điện thoại Việt Nam, ngày tháng, mã màu, UUID, slug, số nguyên, số thập phân và trích xuất text. Công cụ phù hợp cho developer, QA, data analyst, content editor và người đang học regex qua ví dụ. Các pattern được cung cấp như gợi ý thực hành; với hệ thống production hoặc dữ liệu nhạy cảm, bạn nên test thêm bằng bộ dữ liệu thật của dự án.
Tính năng nổi bật
- 12+ patterns phổ biến
- Test regex realtime
- Copy pattern
- Ví dụ cho mỗi pattern
Regex là gì?
Regular Expression là cú pháp mô tả mẫu ký tự để tìm kiếm, kiểm tra hoặc trích xuất dữ liệu trong văn bản. Regex thường dùng trong form validation, xử lý log, đổi định dạng nội dung và tự động hóa thao tác text.
Lợi ích khi sử dụng
- Tạo pattern nhanh hơn khi xử lý text
- Validate form input ở mức tham khảo
- Tìm kiếm và trích xuất dữ liệu
- Học regex qua ví dụ cụ thể
- Copy pattern để dùng trong code hoặc editor
Cách sử dụng
- 1Chọn pattern hoặc tự viết
- 2Nhập test string
- 3Click Test
Regex Patterns Cho Validate Dữ Liệu Việt Nam
Công cụ cung cấp nhiều regex patterns tham khảo cho dữ liệu Việt Nam: số điện thoại di động bắt đầu bằng 0 hoặc +84, CMND 9 số, CCCD 12 số, mã bưu điện, ngày tháng định dạng DD/MM/YYYY và một số pattern nhập liệu thường gặp. Khi dùng cho form validation, bạn nên kiểm tra thêm theo nghiệp vụ thực tế vì quy tắc dữ liệu có thể thay đổi theo từng hệ thống.
Hướng Dẫn Sử Dụng Regex Trong JavaScript, Python Và PHP
Mỗi ngôn ngữ lập trình có cách sử dụng regex hơi khác nhau: JavaScript - new RegExp(pattern, flags) hoặc /pattern/flags, methods: test(), match(), replace(), exec(). Python - import re, methods: re.match(), re.search(), re.findall(), re.sub(), flags: re.IGNORECASE, re.MULTILINE. PHP - preg_match(), preg_match_all(), preg_replace(), pattern cần delimiter: '/pattern/flags'. Java - Pattern.compile(pattern), Matcher class, methods: find(), group(), matches(). Khi copy pattern từ công cụ này: JavaScript dùng trực tiếp, Python cần raw string r'pattern', PHP cần thêm delimiter '/pattern/'. Lưu ý escape characters có thể khác nhau giữa các ngôn ngữ - luôn test pattern trong ngôn ngữ target.
Character Class [ ] khác Alternation ( | ) như thế nào
Đây là một trong những lỗi phổ biến nhất khi viết regex thủ công: bên trong dấu ngoặc vuông [ ], ký tự | không mang nghĩa OR mà bị hiểu như một ký tự literal cần match. Ví dụ pattern [3|5|7|8|9] không có nghĩa là 'khớp với 3, 5, 7, 8 hoặc 9' như nhiều người nhầm tưởng, mà thực chất là một character class gồm các ký tự 3, 5, 7, 8, 9 và cả ký tự | — nghĩa là nó vô tình chấp nhận luôn ký tự | như một giá trị hợp lệ, dù ý định ban đầu chỉ muốn giới hạn 5 chữ số. Cách viết đúng để chỉ chấp nhận một trong các chữ số 3, 5, 7, 8, 9 là character class thuần túy [35789], không có dấu | ở giữa. Ngược lại, toán tử alternation | chỉ có tác dụng OR thực sự khi đứng ngoài character class, ví dụ (3|5|7|8|9) trong một nhóm capturing/non-capturing group, hoặc giữa các cụm pattern lớn hơn như (cat|dog) để khớp 'cat' hoặc 'dog'. Công cụ này đã sửa pattern số điện thoại Việt Nam từ [3|5|7|8|9] (chứa lỗi trên) thành [35789] để phản ánh đúng 5 đầu số di động phổ biến (03, 05, 07, 08, 09) mà không vô tình chấp nhận ký tự | trong số điện thoại.
Các lỗi thường gặp khi tự viết Regex thủ công
Ngoài nhầm lẫn giữa character class và alternation, một số lỗi phổ biến khác: quên escape ký tự đặc biệt như dấu chấm (.) trong domain email hoặc URL, khiến pattern khớp nhầm bất kỳ ký tự nào thay vì chỉ dấu chấm thật. Dùng {n} khi ý định là {n,} hoặc {n,m}, dẫn đến giới hạn độ dài sai (ví dụ mật khẩu tối thiểu 8 ký tự cần {8,} chứ không phải {8}). Quên anchor ^ và $ khiến regex khớp một phần chuỗi con thay vì toàn bộ chuỗi cần validate. Dùng .* quá rộng rãi (greedy) trong khi cần .*? (lazy) để tránh match vượt quá phạm vi mong muốn khi có nhiều dấu phân cách giống nhau trong chuỗi. Trước khi đưa bất kỳ pattern nào vào production, nên test với nhiều test case bao gồm cả input hợp lệ, không hợp lệ và các edge case đặc biệt.
Giải thích các pattern có sẵn trong công cụ
12 pattern có sẵn phủ các nhu cầu phổ biến nhất: Email và URL dùng để validate form nhập liệu web. Số điện thoại VN, CMND/CCCD, mã bưu điện, biển số xe phục vụ các form nhập liệu đặc thù Việt Nam. IPv4 dùng khi xử lý log server hoặc validate địa chỉ mạng. Hex Color hữu ích cho công cụ thiết kế hoặc CSS. Date (DD/MM/YYYY) và Username, Password mạnh, Số nguyên là các pattern validate form thường gặp trong đăng ký tài khoản. Mỗi pattern đi kèm một ví dụ cụ thể để bạn hiểu ngay pattern đó chấp nhận định dạng nào trước khi áp dụng vào dữ liệu thật của mình.
Câu hỏi thường gặp (FAQ)
Có hỗ trợ dữ liệu Việt Nam không?
Có. Công cụ có các gợi ý pattern cho số điện thoại, CMND/CCCD và một số định dạng thường gặp tại Việt Nam.
Regex tạo ra có dùng ngay cho production không?
Nên xem là mẫu tham khảo. Bạn cần test thêm với dữ liệu thật, edge case và yêu cầu bảo mật của dự án trước khi dùng trong production.
Regex có phân biệt chữ hoa chữ thường không?
Tùy flags. Nếu dùng flag i, regex sẽ không phân biệt hoa thường. Nếu không có flag này, nhiều engine sẽ phân biệt hoa thường.
Có dùng được cho JavaScript, Python và PHP không?
Có thể dùng, nhưng mỗi ngôn ngữ có cách escape và khai báo regex khác nhau. Hãy kiểm tra lại cú pháp khi copy sang môi trường thật.
Vì sao [3|5|7|8|9] không đúng để chọn một trong các chữ số 3, 5, 7, 8, 9?
Vì bên trong dấu ngoặc vuông [ ], ký tự | không có nghĩa OR mà bị hiểu là một ký tự literal. [3|5|7|8|9] thực chất là character class chứa các ký tự 3, 5, 7, 8, 9 và cả ký tự |, nên nó vô tình chấp nhận luôn dấu | như một giá trị hợp lệ. Cách viết đúng là [35789], không có dấu | ở giữa.
Khi nào nên dùng character class [ ] và khi nào dùng alternation ( | )?
Dùng character class [abc] khi muốn khớp một ký tự đơn trong tập hợp các ký tự. Dùng alternation (abc|def) khi muốn khớp một trong nhiều chuỗi/cụm ký tự có độ dài khác nhau, ví dụ (cat|dog) để khớp toàn bộ từ 'cat' hoặc 'dog' chứ không phải từng ký tự riêng lẻ.
Pattern số điện thoại VN trong công cụ này có bắt được tất cả đầu số không?
Pattern ^(0|+84)[35789][0-9]{8}$ khớp các số bắt đầu bằng 0 hoặc +84, theo sau là một trong 5 chữ số đầu (3, 5, 7, 8, 9) và 8 chữ số tiếp theo, phù hợp với các đầu số di động phổ biến. Đầu số cụ thể có thể thay đổi theo thời gian nên vẫn nên đối chiếu với danh sách đầu số mới nhất khi validate thực tế.
Copy pattern rồi paste vào code có chạy được ngay không?
Thường chạy được với JavaScript vì cú pháp regex literal /pattern/flags tương thích trực tiếp. Với Python cần bọc trong raw string r'pattern', với PHP cần thêm ký tự delimiter ở đầu và cuối như '/pattern/'. Nên test lại sau khi copy sang môi trường khác.
Làm sao biết test string có khớp toàn bộ hay chỉ khớp một phần?
Nếu pattern có anchor ^ ở đầu và $ ở cuối, regex chỉ khớp khi toàn bộ chuỗi thỏa mãn điều kiện. Nếu thiếu anchor, regex có thể khớp một đoạn con bất kỳ trong chuỗi dài hơn, dẫn đến kết quả 'match' dù chuỗi gốc thực ra không hợp lệ hoàn toàn.
Có thể kết hợp nhiều pattern có sẵn thành một pattern mới không?
Có thể, nhưng cần cẩn thận với các anchor ^ và $ vì mỗi pattern có sẵn thường đã tự đóng khung toàn bộ chuỗi. Nên viết lại logic kết hợp thành một pattern hoàn chỉnh thay vì nối trực tiếp hai pattern lại với nhau.
Vì sao nút Test không trả về kết quả dù pattern và test string đều có vẻ đúng?
Có thể do regex không hợp lệ về cú pháp (ví dụ thiếu dấu ngoặc đóng), hoặc pattern có anchor ^ $ nhưng test string chứa khoảng trắng thừa ở đầu/cuối khiến không khớp toàn bộ. Kiểm tra lại cú pháp pattern và loại bỏ khoảng trắng thừa trong test string.
Pattern CMND/CCCD trong công cụ có phân biệt được CMND cũ và CCCD mới không?
Pattern ^[0-9]{9}$|^[0-9]{12}$ chỉ kiểm tra độ dài chuỗi số (9 số cho CMND cũ hoặc 12 số cho CCCD mới), không kiểm tra thêm cấu trúc mã tỉnh hay ngày sinh mã hóa bên trong. Đây là pattern tham khảo cơ bản, cần bổ sung logic kiểm tra sâu hơn nếu hệ thống yêu cầu độ chính xác cao.
Từ khóa liên quan
- regex generator
- tạo regex
- regular expression
- regex tester
- regex pattern
- validate email regex
- số điện thoại regex
- regular expression online
- character class vs alternation
- regex character class
- regex OR operator
- lỗi regex thường gặp
- regex số điện thoại việt nam
- test regex online
- regex validate form
- regex escape ký tự đặc biệt
- regex greedy lazy
- quantifier regex