Chuyển đến nội dung chính
Mô-đun 8 · Bài học 1 trong tổng số 429/32 trong khóa học~12 min
Bài học theo mô-đun (1/4)

Xác thực một email

Xác thực một email "chính xác" là một vấn đề khó nhiều hơn bạn tưởng: RFC 5322 là một con quái vật. Trong thực tế, chúng tôi chọn một mẫu đủ tốt mà chấp nhận những trường hợp thông thường và bác bỏ những trường hợp rõ ràng là sai.

Code
Pattern: ^[\w.+-]+@[\w-]+(?:\.[\w-]+)+$
  • [\w.+-]+ -- phần cục bộ: chữ cái, chữ số, _, ., +, -.
  • @ -- dấu phân cách.
  • [\w-]+(?:\.[\w-]+)+ -- tên miền + ít nhất một TLD được phân tách bằng ..

Nội dung chấp nhận: mario.rossi@example.com, foo+bar@sub.example.co.uk, user_123@test-domain.io.

Nội dung từ chối: mario@, @example.com, mario@example (không có TLD), dấu cách.

sự đánh đổi

Mẫu trên không chấp nhận:

  • Chuỗi được trích dẫn "strange (things)"@example.com (RFC cho phép chúng).
  • Tên miền có ký tự Unicode (\u00fcber@m\u00fcnchen.de).
  • TLD rất dài không vượt qua \w (ví dụ: TLD được quốc tế hóa).

Nếu bạn cần chúng, hãy mở rộng lớp thành \p{L} bằng cờ u hoặc ủy quyền cho một thư viện chuyên ngành.

Sự đánh đổi và các phương pháp hay nhất để xác thực email

Không có biểu thức chính quy nào có thể đảm bảo rằng địa chỉ email thực sự tồn tại. Các mẫu quá phức tạp sẽ làm giảm hiệu suất và loại trừ các miền bất thường nhưng hợp lệ. Tốt hơn là sử dụng mẫu xác thực đơn giản để từ chối lỗi chính tả rõ ràng và gửi mã xác minh.

Hãy thử nó

tập thể dục#regex.m8.l1.e1
Nỗ lực: 0Đang tải…

Nhận dạng mọi email trong văn bản. Sử dụng mẫu đơn giản: chữ cái/chữ số/dấu chấm trước tên miền @, có ít nhất một dấu chấm.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Mở rộng phần cục bộ thành [\\w.+-]+ và tên miền thành [\\w-]+\\.[\\w.-]+ để chấp nhận nhiều TLD.

Giải pháp khả dụng sau 3 lần thử

Xem lại bài tập

tập thể dục#regex.m8.l1.e2
Nỗ lực: 0Đang tải…

Lấy miền (phần sau @) của mỗi email dưới dạng nhóm được đặt tên `dominio`.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Gói phần miền trong một nhóm được đặt tên: (?<dominio>[\\w.-]+).

Giải pháp khả dụng sau 3 lần thử

Thử thách bổ sung

tập thể dục#regex.m8.l1.e3
Nỗ lực: 0Đang tải…

Find the domain part of an email (everything after `@`), excluding the `@` sign using lookbehind.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Sử dụng giao diện tích cực (?<=@) phía trước lớp ký tự miền.

Giải pháp khả dụng sau 3 lần thử