Hàm PHP này nhằm mục đích xác thực và vệ sinh dữ liệu. Nó có khả năng lọc một biến duy nhất với một bộ lọc cụ thể. Hai phần dữ liệu được bao gồm trong đó. biến cần kiểm tra và cách kiểm tra áp dụng
Biểu thức chính quy preg_match[] nhằm mục đích tìm kiếm chuỗi cho một mẫu. True sẽ được trả về khi mẫu ở đó, và ngược lại, false
Trong bài viết này, chúng ta sẽ tìm hiểu cách xác thực email bằng biểu thức chính quy PHP. Chúng ta sẽ tìm hiểu các phương pháp khác nhau để xác thực địa chỉ email trong PHP
Phương pháp1
Hàm preg_match[] kiểm tra đầu vào khớp với các mẫu bằng biểu thức chính quy
Ví dụ
Bản thử trực tiếp
đầu ra
Valid email address.
Trong ví dụ trên, hàm PHP preg_match[] đã được sử dụng để tìm kiếm chuỗi cho một mẫu và toán tử bậc ba PHP đã được sử dụng để trả về giá trị đúng hoặc sai dựa trên giá trị trả về preg_match
Thật không may, việc xác minh chính xác địa chỉ email không phải là một nhiệm vụ dễ dàng, vì vậy chúng tôi đã tổng hợp hướng dẫn chi tiết này để giúp bạn giải quyết. Vui lòng tự mình thử các đoạn mã chúng tôi đã chia sẻ để thử nghiệm xác thực địa chỉ email trong PHP. Ngoài ra, để thay thế, hãy xem hướng dẫn của chúng tôi để xác thực email bằng regex
Cách kiểm tra định dạng của địa chỉ email trong PHP
PHP vốn cung cấp một loạt hàm để xác thực và lọc, đáng chú ý nhất là hàm filter_var[], có thể xác thực định dạng địa chỉ email
Hàm filter_var[] chấp nhận 3 tham số
- Tham số đầu tiên là biến để xác thực
- Tham số thứ hai xác định loại bộ lọc sẽ được áp dụng. Chức năng này cho phép bạn kiểm tra định dạng của địa chỉ IP, tên miền và nhiều định dạng khác, bao gồm cả địa chỉ email. Tài liệu cung cấp danh sách tất cả các bộ lọc có thể sử dụng
- Tham số thứ ba cho phép bạn chỉ định các tùy chọn sẽ xác định hoạt động của hàm filter_var[]. Các tùy chọn này phụ thuộc vào loại bộ lọc đang được sử dụng
Để sử dụng filter_var[] để thực hiện xác thực định dạng email, tham số thứ hai phải được đặt thành FILTER_VALIDATE_EMAIL. Nếu bạn biết rằng địa chỉ email để xác thực có chứa các ký tự Unicode, thì bạn cũng phải chỉ định tùy chọn FILTER_FLAG_EMAIL_UNICODE làm tham số thứ ba. Đây là hai ví dụ
// Example with US characters only
$address = 'john.doe@email.com';
if[filter_var[$address, FILTER_VALIDATE_EMAIL]] {
echo 'Valid!';
} else {
echo 'Not valid :[';
}
// Example with Unicode characters
$address = 'Потапов@email.com';
if[filter_var[$address, FILTER_VALIDATE_EMAIL, FILTER_FLAG_EMAIL_UNICODE]] {
echo 'Valid!';
} else {
echo 'Not valid :[';
}
Tuy nhiên, nhìn vào chức năng trên GitHub sẽ thấy ngay rằng việc kiểm tra định dạng địa chỉ email sẽ không hoạt động trong mọi trường hợp. Đây là bình luận của nhà phát triển. Regex này không xử lý các bình luận và khoảng trắng gấp
Thật vậy, ngay cả khi hiếm, các khoảng trắng vẫn được cho phép trong một địa chỉ email miễn là chúng được mã hóa và trong trường hợp này, giống như các trường hợp tương tự khác, hàm có thể cung cấp một phủ định sai [cho biết rằng địa chỉ email không hợp lệ, trong khi nó
Xác thực email bằng hàm filter_var[] của PHP
Tuy nhiên, xác thực định dạng địa chỉ là không đủ. Để tập lệnh xác thực dữ liệu biểu mẫu có hiệu lực, tập lệnh phải kiểm tra xem địa chỉ email có thực sự tồn tại không
Ví dụ: địa chỉ email john. doe@donteventrytofindthis. máy chủ, hoặc thậm chí đơn giản hơn john. doe@mgail. com, mặc dù có định dạng hợp lệ, sẽ không tồn tại. Việc xác thực chỉ dựa trên hàm filter_var[] sẽ không phát hiện ra lỗi
Để triển khai tập lệnh xác minh như vậy, cần phải viết logic phức tạp để kiểm tra sự tồn tại của tên miền, sau đó truy vấn các bản ghi của nó để xác định xem các trường MX có được điền chính xác hay không và cuối cùng kiểm tra xem máy chủ SMTP có phản hồi chính xác không. Có thể dễ dàng hình dung, đây là một nhiệm vụ nặng nề
Giải pháp xác minh email hiệu quả nhất với PHP. sử dụng API Tóm tắt
Khi quá khó để phát triển một giải pháp hiệu quả, người ta phải chuyển sang các dịch vụ có sẵn trên Internet và lý tưởng nhất là chọn một trong những API xác thực email tốt nhất
Tóm tắt cung cấp API miễn phí cho phép xác minh địa chỉ email, xác thực định dạng của chúng và kiểm tra xem tên miền có thể định tuyến được không [nói cách khác. nó kiểm tra xem máy chủ có tồn tại không]. API cũng cho biết liệu địa chỉ email có phải từ dịch vụ email dùng một lần không cần nhận dạng để sử dụng hay không
Để sử dụng API trừu tượng, hãy tạo tài khoản và nhận khóa API riêng của bạn. Sau đó, việc sử dụng API đơn giản như một cuộc gọi qua curl, như thế này
Không còn nhu cầu trong PHP để tạo các biểu thức chính quy của riêng bạn để cố gắng xác thực địa chỉ email; . Điều này có sẵn từ PHP 5. 2. 0
Cập nhật ngày 23 tháng 7 năm 2010
Như đã chỉ ra trong một bình luận trên trang này, e. g. chris@example sẽ xác thực mặc dù đây không phải là miền thông thường. Tuy nhiên, phần tên miền của địa chỉ email không thực sự cần chứa dấu chấm [e. g. máy chủ cục bộ]. Trong sử dụng thực tế, bạn thường muốn đảm bảo phần tên miền bao gồm một dấu chấm, vì vậy tôi đã viết một bài đăng cập nhật có thêm biểu thức chính quy để kiểm tra điều này
- Xác thực email PHP với filter_var – đã cập nhật
Xác thực địa chỉ email bằng filter_var
Hàm filter_var chấp nhận ba tham số nhưng để kiểm tra địa chỉ email thì chỉ cần hai tham số đầu tiên. Tham số đầu tiên là dữ liệu cần lọc, trong trường hợp này là địa chỉ email và tham số thứ hai là loại bộ lọc, trong trường hợp này là FILTER_VALIDATE_EMAIL
hàm filter_var trả về dữ liệu đã lọc hoặc sai nếu bộ lọc bị lỗi. Do đó, có thể thực hiện kiểm tra đối với một địa chỉ email hợp lệ bằng cách kiểm tra xem có bất kỳ thứ gì được trả về như vậy không
if[filter_var["chris@example.com", FILTER_VALIDATE_EMAIL]] { // it's valid so do something } else { // it's not valid so do something else }
Dưới đây là một số ví dụ khác
// test good email address echo filter_var["chris@example.com", FILTER_VALIDATE_EMAIL] ? "goodn" : "badn"; // test good email address echo filter_var["chris@a.b.c.example.com", FILTER_VALIDATE_EMAIL] ? "goodn" : "badn"; // not allowed . before @ echo filter_var["chris.@example.com", FILTER_VALIDATE_EMAIL] ? "goodn" : "badn"; // not allowed . in domain part echo filter_var["chris@example..com", FILTER_VALIDATE_EMAIL] ? "goodn" : "badn"; // not allowed . after @ echo filter_var["chris@.example.com", FILTER_VALIDATE_EMAIL] ? "goodn" : "badn"; // not allowed double @ echo filter_var["chris@@example.com", FILTER_VALIDATE_EMAIL] ? "goodn" : "badn"; // not allowed @ more than once anywhere echo filter_var["chris@exa@mple.com", FILTER_VALIDATE_EMAIL] ? "goodn" : "badn"; // must have @ echo filter_var["chris#example.com", FILTER_VALIDATE_EMAIL] ? "goodn" : "badn";
Và đầu ra từ trên
good good bad bad bad bad bad bad
Kiểm tra tên miền hợp lệ
Một số người đã hỏi tôi cách kiểm tra xem miền có hợp lệ hay không, như một phần của việc kiểm tra tính hợp lệ của địa chỉ email. Một cách để làm điều đó là thực hiện tra cứu bản ghi MX trên miền [với dự phòng là tra cứu bản ghi A]. Tôi sẽ không tự mình làm việc này, nhưng đã viết một bài về cách lấy địa chỉ IP của máy chủ thư bằng PHP để giúp mọi người nếu họ muốn