Để đảm bảo rằng biến $email chứa địa chỉ email hợp lệ, bạn cần có hàm filter_var[]
filter_var[] là một hàm PHP thực hiện kiểm tra xác thực và khử trùng trên các biến
Để thông báo cho filter_var[] rằng bạn muốn xác thực địa chỉ email, bạn cần sử dụng cờ FILTER_VALIDATE_EMAIL
filter_var[] trả về true nếu email hợp lệ, ngược lại là false
Đây là cách sử dụng nó
$email = 'name@mydomain.com';
if [filter_var[$email, FILTER_VALIDATE_EMAIL]] {
echo $email . ' is a valid email address.';
}
else {
echo $email . ' is NOT a valid email address.';
}
name@mydomain.com is a valid email address.
filter_var[] từ chối các địa chỉ email không có định dạng “tên@miền” hợp lệ hoặc chứa các ký tự không được phép trong địa chỉ email
Dưới đây là một số ví dụ về địa chỉ hợp lệ và không hợp lệ
$emails = [
'name@mydomain.com', // Valid address
'name_with_\'_quotes@mydomain.com', // Valid: single quotes are allowed
'@mydomain.com', // Not valid: missing name
'name@', // Not valid: missing domain
'name with spaces@mydomain.com', // Not valid: spaces are not allowed
'name_with_"_doublequotes@mydomain.com', // Not valid: double quotes are not allowed
'name1@name2@mydomain.com' // Not valid: too many "@"
];
foreach [$emails as $email] {
echo $email . ' --> ';
if [filter_var[$email, FILTER_VALIDATE_EMAIL]] {
echo 'valid.
';
}
else {
echo 'NOT valid.
';
}
}
name@mydomain.com --> valid.
name_with_'_quotes@mydomain.com --> valid.
@mydomain.com --> NOT valid.
name@ --> NOT valid.
name with spaces@mydomain.com --> NOT valid.
name_with_"_doublequotes@mydomain.com --> NOT valid.
name1@name2@mydomain.com --> NOT valid.
Xác thực VS Vệ sinh
filter_var[] cũng hỗ trợ cờ FILTER_SANITIZE_EMAIL
Nếu bạn sử dụng cờ này, filter_var[] sẽ khử trùng chuỗi bằng cách xóa tất cả các ký tự không thể sử dụng trong địa chỉ email
Tuy nhiên, điều này không đảm bảo rằng kết quả là một địa chỉ email hợp lệ
Ngay cả khi một chuỗi không có ký tự không hợp lệ, nó vẫn có thể thiếu định dạng email phù hợp
Nhìn vào ví dụ sau
$address = 'invalid_address_£[]@';
echo 'Address: ' . $address . '
';
/* Sanitization removes all the invalid characters.. */
$sanitizedAddress = filter_var[$address, FILTER_SANITIZE_EMAIL];
echo 'Sanitized address: ' . $sanitizedAddress . '
';
/* However, the address is still invalid. */
if [filter_var[$sanitizedAddress, FILTER_VALIDATE_EMAIL]] {
echo 'The address is valid.';
}
else {
echo 'The address is still not valid.';
}
Address: invalid_address_£[]@
Sanitized address: invalid_address_@
The address is still not valid.
Như bạn có thể thấy, việc sử dụng cờ FILTER_SANITIZE_EMAIL không thực sự hữu ích vì bạn vẫn cần xác thực biến
Tôi khuyên bạn chỉ nên sử dụng cờ FILTER_VALIDATE_EMAIL để thay thế
Cách kiểm tra tên miền của email
Giả sử bạn đã xác thực thành công địa chỉ email của mình
Bây giờ, làm thế nào bạn có thể chắc chắn rằng một địa chỉ email thực sự tồn tại?
Cách duy nhất để biết chắc chắn là thử gửi email đến địa chỉ đó và phân tích câu trả lời của máy chủ SMTP
Tuy nhiên, thủ tục này phức tạp và không phải lúc nào cũng đáng tin cậy
Điều bạn có thể làm dễ dàng hơn nhiều là kiểm tra phần tên miền của email
Nếu miền hợp lệ, thì bạn có thể cho rằng email cũng hợp lệ
Trước tiên, bạn cần trích xuất tên miền từ địa chỉ
Đây là cách
$address = 'myaddress@gmail.com';
// Find the position of @
$atPos = mb_strpos[$address, '@'];
// Select the domain
$domain = mb_substr[$address, $atPos + 1];
Tiếp theo, xác thực tên miền bằng hàm checkdnsrr[]
Bạn cần truyền hai đối số cho hàm này
Đối số đầu tiên là tên miền theo sau là dấu chấm. Bạn cần thêm dấu chấm để tránh tra cứu sai
Đối số thứ hai là chuỗi “MX” báo cho hàm kiểm tra bản ghi DNS của email
Đây là mã
if [checkdnsrr[$domain . '.', 'MX']] {
echo 'Domain "' . $domain . '" is valid';
}
else {
echo 'Domain "' . $domain . '" is not valid';
}
Domain "gmail.com" is valid
Giới thiệu về xác thực email giao diện người dùng
Xác thực email mặt trước được thực hiện trực tiếp trong trình duyệt
Ví dụ: nếu bạn đặt loại đầu vào của biểu mẫu HTML là “email”, trình duyệt sẽ tự động dừng việc gửi các địa chỉ email không hợp lệ
$email = 'name@mydomain.com';
if [filter_var[$email, FILTER_VALIDATE_EMAIL]] {
echo $email . ' is a valid email address.';
}
else {
echo $email . ' is NOT a valid email address.';
}
0Bạn cũng có thể sử dụng JavaScript để thực hiện kiểm tra xác thực
Xác thực giao diện người dùng rất hữu ích để nắm bắt các lỗi phổ biến của người dùng và cải thiện trải nghiệm người dùng
Tuy nhiên, bạn phải nhớ rằng xác thực giao diện người dùng không an toàn và bạn không bao giờ được dựa vào nó
Người dùng độc hại có thể dễ dàng bỏ qua bất kỳ loại xác thực giao diện người dùng nào và gửi các giá trị không hợp lệ tới tập lệnh back-end PHP của bạn