8 regex ngắn hay dán mỗi ngày | Email, URL, trim, log — pocket card【2026】

(Cập nhật: 19 tháng 7, 2026 ) regex biểu thức chính quy pattern ngắn validation log tiếng Việt JavaScript
Kết luận

Pocket card 8 pattern ngắn — đủ cho 80% việc hàng ngày: lọc số, trim, gộp space, email/URL lỏng, lấy chuỗi trong ngoặc, key=value trong log, và chữ Unicode cơ bản. Giữ ngắn có chủ đích: dễ đọc review, ít backtracking hơn “monster regex” Stack Overflow. Trước khi merge: 3 good / 3 bad trên Regex tester Kawa (chạy trình duyệt, không gửi server). Cần checklist ReDoS / fixture dày hơn → đọc bài pattern sâu riêng, không nhồi vào đây.

Developer fresher / freelancer Việt hay mở tab tìm “regex email hoàn hảo”, paste 200 ký tự vào form đăng ký, rồi tối debug vì [email protected] fail hoặc tab treo. Góc bài này khác: chỉ giữ pattern ngắn bạn thật sự dán lại mỗi tuần — như thẻ ghi chú cạnh màn hình, không phải encyclopedia.

Ai nên bookmark

  • Người hay viết validate form nhanh, sanitize nhẹ, parse log staging
  • Ai muốn nhớ ít pattern thay vì sưu tầm 50 biến thể
  • Team outsourcing cần convention chung: “email chỉ lọc typo, không pretend RFC”

Nguyên tắc giữ ngắn

  1. Một việc một pattern — đừng vừa validate email vừa bắt TLD 50 ký tự
  2. Có neo ^ $ khi validate cả chuỗi; bỏ neo khi extract
  3. 3 good / 3 bad cạnh pattern trong PR
  4. Không quantifier lồng kiểu (a+)+ trên input user
  5. Ghi chú giới hạn trong comment: // loose only

Bảng pocket — 8 pattern

8 regex ngắn dùng hàng ngày
Việc Pattern Ghi chú một dòng
Chỉ chữ số ^\d+$ Tuổi, OTP thô; không dấu +/thập phân
Alnum ASCII ^[a-zA-Z0-9]+$ Username nội bộ; fail tên Việt có dấu
Email lỏng ^[^\s@]+@[^\s@]+\.[^\s@]+$ Có @ và dấu chấm; không RFC
URL http(s) https?://[^\s]+ Extract; có thể dính dấu câu cuối
Trim đầu/cuối ^\s+|\s+$ Replace → ''
Gộp khoảng trắng \s+ Replace → một space
Trong ngoặc kép "([^"]*)" Capture group 1 = nội dung
Log key=value (\w+)=([^\s]+) Flag g; value không có space

Dưới đây mỗi mục: khi dùng / khi tránh / good / bad.

1. Chỉ chữ số — ^\d+$

Good: 0, 42, 2026
Bad:  3.14, +84, 1_000, ""

Phù hợp OTP đã tách riêng, mã số nội bộ. Không dùng cho tiền VND (có dấu chấm/phẩy) hay số điện thoại.

2. Alnum ASCII — ^[a-zA-Z0-9]+$

Good: user01, TeamA2
Bad:  nguyễn, user_name, user-name

Username hệ thống cũ. Tên người Việt → fail ngay vì dấu và Đ/đ. Đừng dùng cho họ tên.

3. Email lỏng — ^[^\s@]+@[^\s@]+\.[^\s@]+$

Good: [email protected], [email protected]
Bad:  a@b, a [email protected], @x.com

Chặn thiếu @ / thiếu dấu chấm domain. Không chứng minh mailbox tồn tại. Đăng ký thật: gửi mail xác nhận.

4. URL — https?://[^\s]+

Good: https://example.com/a?x=1
Bad:  example.com (thiếu scheme), ftp://...

Extract từ log/chat. Cẩn thận dấu ) hoặc . cuối câu tiếng Việt dính vào match — trim tay hoặc siết class ký tự nếu cần.

5–6. Trim và gộp space

Replace ^\s+|\s+$ → rỗng; replace \s+ → một space. Dọn paste từ Slack/Zalo trước khi so sánh chuỗi hoặc đếm ký tự.

7. Chuỗi trong ngoặc kép — "([^"]*)"

Lấy config thô name="value". Không xử lý escape \" — nếu log có escape, chuyển parser.

8. Log key=value(\w+)=([^\s]+) với flag g

Good: userId=42 status=ok
Bad:  msg=hello world   (value có space → cắt sớm)

Đủ để bóc requestId, status từ log một dòng. Value có space → đổi strategy (JSON log, hoặc pattern khác).


Bonus ngắn: chữ có dấu / Unicode

Nhiều bài JA liệt kê hiragana/katakana. Với developer Việt, nhu cầu gần hơn là không loại tên có dấu:

// JS có flag u — kiểm tra engine
const reLetter = /^\p{L}+$/u;
reLetter.test("Nguyễn"); // phụ thuộc engine + property escapes

Nếu môi trường không hỗ trợ \p{L}, đừng giả vờ [A-Za-z]+ đủ cho form họ tên — hãy không validate bằng regex chữ, chỉ trim độ dài và để user nhập Unicode.

Test tối thiểu: Nguyễn, Đặng, phở, .


Case study 12 phút: form intern

Intern thêm validate username + email bằng hai monster regex copy web. QA fail:

InputKỳ vọngKết quả monster
an.nguyenOK usernameFail (cấm dấu .)
[email protected]OK emailFail
chuỗi 5k chữ aaaa...!Reject nhanhTab treo (backtracking)

Sửa: username ^[a-zA-Z0-9._]{3,32}$; email lỏng như mục 3; độ dài max 254 trước khi test regex; unit test 3+3. Reviewer approve trong một vòng.


Quy trình test trên Kawa

  1. Mở Regex tester
  2. Dán pattern + bật đúng g / i / m
  3. Dán block text gồm good và bad xen kẽ
  4. Xác nhận highlight đúng chỗ; thử thêm chuỗi cực dài nếu pattern có + / *
  5. Copy pattern vào code — không chỉnh lại “cho đẹp” mà quên fixture

🔍 Kiểm tra mẫu regex ngay tại đây

 

Toàn bộ chạy trong trình duyệt — phù hợp log staging đã che PII, không dán lên regex101 công cộng nếu còn token.


Khi nào mở bài dài hơn (và khi nào dừng)

Nhu cầuLàm gì
Nhớ pattern dán hàng ngàyBookmark bài này (pocket)
ReDoS, UUID, SĐT VN format, fixture dàyBài regex pattern sâu / checklist ship
Parse HTML/CSV/email RFCKhông regex — parser / lib / OTP

Giữ hai lớp tách biệt giúp onboard fresher: học ngắn trước, học cảnh báo sau — tránh một trang 40 pattern khiến không ai thuộc.


Checklist PR một dòng comment

// loose email — typo filter only; server sends confirm mail
  • Pattern < ~40 ký tự hoặc có lý do rõ nếu dài hơn
  • ^$ đúng ý validate full-string
  • 3 good / 3 bad trong test
  • Đã thử trên /vi/tools/regex/
  • Không parse HTML/CSV bằng regex
  • Comment ghi “loose” nếu là email/URL

Tóm tắt mang đi

  1. Tám pattern ngắn cover hầu hết việc validate/extract nhẹ
  2. Email/URL luôn “lỏng” — xác nhận thật ở lớp khác
  3. Tên Việt có dấu[A-Za-z]+
  4. Test local trước merge — mở Regex tester với đúng flag

Dán bảng pocket vào Notion team hoặc comment snippet nội bộ: lần sau không cần hỏi “regex email nào đúng?” — trả lời “bản lỏng + OTP”, xong việc.