Sau khi đã làm gọn các khối logic điều kiện bằng Guard Clauses ở bài trước, đôi khi bạn vẫn gặp phải những bài toán “khó nhằn” không thể giải quyết bằng if-else thông thường: validate và bóc tách chuỗi phức tạp.
Viết Regular Expression (Regex) từ lâu đã là nỗi ám ảnh. Cú pháp kỳ dị (?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,} khiến việc tự ngồi gõ, tra cheat sheet và debug thường ngốn mất 15–30 phút, đôi khi vẫn lọt lỗi ngớ ngẩn trên production.
Với các LLM như Claude hay ChatGPT, bạn có thể tạo Regex chuẩn xác chỉ trong 10 giây. Tuy nhiên, nếu prompt sơ sài kiểu “Viết cho tôi regex email/sđt”, AI rất dễ tạo ra chuỗi regex “ảo giác” (hallucination) hoặc bỏ sót edge-case.
Dưới đây là kỹ thuật prompt 4 bước giúp bạn nhận kết quả chuẩn xác 100% kèm code test sẵn.
1. Công thức prompt 4 tầng: “Few-Shot” Regex
Ép AI vào khuôn khổ với prompt gồm 4 thành phần rõ ràng:
Template Prompt:
“Đóng vai chuyên gia lập trình [JavaScript / Python / PHP]. Hãy viết giúp tôi một biểu thức Regular Expression cho bài toán sau:
- Mục tiêu: [Mô tả chuỗi cần match]
- Dữ liệu HỢP LỆ (Pass): [Liệt kê 2–3 mẫu đúng]
- Dữ liệu KHÔNG HỢP LỆ (Fail): [Liệt kê 2–3 case vi phạm cần chặn]
- Ràng buộc: [Độ dài, ký tự đặc biệt, mã vùng…]
Yêu cầu đầu ra:
- Cung cấp pattern Regex chuẩn.
- Giải thích chi tiết từng cụm token/group trong biểu thức.
- Cung cấp 1 đoạn code mẫu có sẵn mảng test chạy thử cả case Pass và Fail.”
2. Ví dụ thực chiến: Validate số điện thoại di động Việt Nam
Input Prompt:
Plaintext
Hãy viết giúp tôi Regex bằng JavaScript để validate số điện thoại cá nhân tại Việt Nam:
1. Hợp lệ: "0912345678", "+84912345678", "84987654321", "0381234567"
2. Không hợp lệ: "0123456789" (đầu số cũ), "091234567" (thiếu số), "09123456789" (thừa số), "abc0912345"
3. Ràng buộc: Chấp nhận đầu số 0, 84 hoặc +84; các đầu mạng 3, 5, 7, 8, 9; chiều dài chuẩn sau mã vùng là 9 số.
Code nhận được:
// Regex pattern
const VN_PHONE_REGEX = /^(?:\+84|84|0)(?:3[2-9]|5[6|8|9]|7[0|6-9]|8[1-9]|9[0-9])[0-9]{7}$/;
function isValidVNPhone(phone) {
return VN_PHONE_REGEX.test(phone.trim());
}
// Bộ test case tự động
const tests = [
{ phone: "0912345678", expect: true },
{ phone: "+84912345678", expect: true },
{ phone: "0123456789", expect: false },
{ phone: "091234567", expect: false }
];
tests.forEach(({ phone, expect }) => {
console.log(`${phone}: ${isValidVNPhone(phone) === expect ? '✅ PASS' : '❌ FAIL'}`);
});
3. Lưu ý sống còn để không bị “bẫy” khi dùng AI viết Regex
- Luôn yêu cầu giải thích từng token: Khi đọc giải thích của AI (ví dụ:
(?:\+84|84|0)là non-capturing group bắt tiền tố), bạn sẽ phát hiện ra ngay nếu AI hiểu sai logic đề bài. - Kiểm tra cờ RegExp (Flags): Để ý cờ
/g(global),/i(ignore case) hoặc/m(multiline). Dùng nhầm cờ/gtrong hàm.test()của JavaScript có thể dẫn đến lỗi luân phiêntrue/falsecực kỳ khó hiểu vì con trỏlastIndexbị dịch chuyển. - Double-check trên regex101.com: Sau khi AI xuất code, ném ngay pattern và bộ sample vào regex101.com để xem visual tree và đảm bảo không dính lỗi Catastrophic Backtracking (gây treo CPU server).
Đừng tốn hàng giờ tra cứu cheat sheet cú pháp Regex khi AI có thể làm việc đó chỉ trong vài giây. Lưu lại prompt mẫu này để dùng ngay cho task validate tiếp theo của bạn nhé!


