Hướng dẫn check email exists php - kiểm tra email tồn tại php

Tôi có thể xác nhận câu trả lời của Joseph và Drew để sử dụng

"^[a-zA-Z0-9_.-][email protected][a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$"
0. Tôi muốn thêm một số phụ lục nhỏ lên trên những câu trả lời đó.

Catch-all nhà cung cấp

Một số nhà cung cấp thư thực hiện một chính sách bắt tất cả, có nghĩa là

"^[a-zA-Z0-9_.-][email protected][a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$"
1 sẽ trả lại dương tính với lệnh
"^[a-zA-Z0-9_.-][email protected][a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$"
2. Nhưng điều này không nhất thiết có nghĩa là hộp thư "tồn tại", như trong "thuộc về con người". Không có gì nhiều có thể được thực hiện ở đây, chỉ cần lưu ý.

IP Greylisting/Danh sách đen

GREYLISTING: Kết nối đầu tiên từ IP không xác định bị chặn. Giải pháp: Thử lại ít nhất 2 lần.

Danh sách đen: Nếu bạn gửi quá nhiều yêu cầu từ cùng một IP, IP này sẽ bị chặn. Giải pháp: Sử dụng xoay IP.

Yêu cầu HTTP trên các biểu mẫu đăng ký

Điều này rất dành riêng cho nhà cung cấp, nhưng đôi khi bạn có thể sử dụng các yêu cầu HTTP được chế tạo tốt và phân tích các phản hồi của các yêu cầu này để xem tên người dùng đã đăng ký hay không với nhà cung cấp này.

Dưới đây là chức năng có liên quan từ một thư viện nguồn mở mà tôi đã viết để kiểm tra địa chỉ

"^[a-zA-Z0-9_.-][email protected][a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$"
3 bằng các yêu cầu Kiểm tra-IF-EMAIL-EXTERS. Tôi biết mã của tôi là rỉ sét và chủ đề này được gắn thẻ PHP, nhưng các ý tưởng tương tự được áp dụng.

Hộp thư đến đầy đủ

Đây có thể là một trường hợp cạnh, nhưng khi người dùng có hộp thư đến đầy đủ,

"^[a-zA-Z0-9_.-][email protected][a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$"
4 sẽ trả về thông báo lỗi
"^[a-zA-Z0-9_.-][email protected][a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$"
5 cho biết nó đã đầy. Điều này có nghĩa là tài khoản thực sự tồn tại!

Tiết lộ

Tôi chạy [Reacher] [1], API xác minh email thời gian thực. Mã của tôi được viết bằng gỉ, và nguồn mở 100%. Kiểm tra xem bạn có muốn một giải pháp mạnh mẽ hơn không:

GitHub: //github.com/reacherhq/check-if-email-exists

Với sự kết hợp của các kỹ thuật khác nhau để nhảy qua các vòng, tôi quản lý để xác minh khoảng 80% email mà khách hàng của tôi kiểm tra.around 80% of the emails my customers check.

Tài liệu của Lực lượng đặc nhiệm kỹ thuật Internet [IETF], RFC 3696, Kỹ thuật ứng dụng để kiểm tra và chuyển đổi tên của John Klensin, đưa ra một số địa chỉ e-mail hợp lệ bị từ chối bởi nhiều thói quen xác nhận PHP. Các địa chỉ: ABC \@[Email & NBSP; được bảo vệ], Khách hàng/[Email & NBSP; được bảo vệ] và! Def! Xyz%[Email & NBSP; được bảo vệ] đều hợp lệ. Một trong những biểu thức thường xuyên phổ biến hơn được tìm thấy trong tài liệu từ chối tất cả chúng:

"^[_a-z0-9-]+[\.[_a-z0-9-]+]*@[a-z0-9-]+[\.[a-z0-9-]+]
↪*[\.[a-z]{2,3}]$"

Biểu thức chính quy này chỉ cho phép các ký tự dấu gạch dưới [_] và dấu gạch nối [-], số và ký tự chữ cái viết thường. Ngay cả khi giả sử một bước tiền xử lý chuyển đổi các ký tự chữ cái chữ hoa thành chữ thường, biểu thức từ chối địa chỉ với các ký tự hợp lệ, chẳng hạn như chém [/], dấu bằng [=], điểm cảm thán [!] Và phần trăm [%]. Biểu thức cũng yêu cầu thành phần miền cấp cao nhất chỉ có hai hoặc ba ký tự, do đó từ chối các miền hợp lệ, chẳng hạn như .museum.

Một giải pháp biểu hiện chính quy yêu thích khác là:

"^[a-zA-Z0-9_.-][email protected][a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$"

Biểu thức chính quy này từ chối tất cả các ví dụ hợp lệ trong đoạn trước. Nó có ân sủng để cho phép các ký tự chữ cái Uppercase và nó không gây ra lỗi khi giả sử một tên miền cấp cao chỉ có hai hoặc ba ký tự. Nó cho phép các tên miền không hợp lệ, chẳng hạn như ví dụ..com.

Liệt kê 1 cho thấy một ví dụ từ PHP Dev Shed [www.devshed.com/c/a/php/email-address-verification-with-php/2]. Mã chứa [ít nhất] ba lỗi. Đầu tiên, nó không nhận ra nhiều ký tự địa chỉ e-mail hợp lệ, chẳng hạn như phần trăm [%]. Thứ hai, nó chia địa chỉ e-mail vào tên người dùng và các phần miền tại AT Dấu [@]. Các địa chỉ e-mail có chứa một dấu hiệu được trích dẫn, chẳng hạn như ABC \@[Email & NBSP; được bảo vệ] sẽ phá vỡ mã này. Thứ ba, nó không kiểm tra các bản ghi DNS địa chỉ máy chủ. Máy chủ có mục nhập DNS loại A sẽ chấp nhận e-mail và có thể không nhất thiết phải xuất bản một mục nhập loại MX. Tôi không chọn tác giả tại PHP Dev Shed. Hơn 100 người đánh giá đã cho xếp hạng bốn ngôi sao này.

Liệt kê 1. Xác thực e-mail không chính xác

function checkEmail[$email] {
  if[preg_match["/^[[a-zA-Z0-9]]+[[a-zA-Z0-9\._-]]
  ↪*@[[a-zA-Z0-9_-]]+[[a-zA-Z0-9\._-]+]+$/",
               $email]]{
    list[$username,$domain]=split['@',$email];
    if[!checkdnsrr[$domain,'MX']] {
      return false;
    }
    return true;
  }
  return false;

Một trong những giải pháp tốt hơn đến từ blog của Dave Child tại Ilovejackdaniel's [ilovejackdaniels.com], được hiển thị trong liệt kê 2 [www.ilovejackdaniels.com/php/email-address-validation]. Dave không chỉ yêu rượu whisky Mỹ tốt, anh ấy còn làm một số bài tập về nhà, đọc RFC 2822 và nhận ra phạm vi nhân vật thực sự có giá trị trong tên người dùng e-mail. Khoảng 50 người đã nhận xét về giải pháp này tại trang web, bao gồm một vài sửa chữa đã được đưa vào giải pháp ban đầu. Lỗ hổng chính duy nhất trong mã phát triển tập thể tại ILOVEJackDaniel's là nó không cho phép các ký tự được trích dẫn, chẳng hạn như \@, trong tên người dùng. Nó sẽ từ chối một địa chỉ có nhiều hơn một dấu hiệu, do đó nó không bị vấp vào việc tách tên người dùng và các bộ phận miền bằng cách sử dụng Explode ["@", $ email]. Một lời chỉ trích chủ quan là Bộ luật dành rất nhiều nỗ lực để kiểm tra độ dài của từng thành phần của phần miền, Effect rất chỉ dành cho việc thử tra cứu miền. Những người khác có thể đánh giá cao sự siêng năng được trả tiền để kiểm tra tên miền trước khi thực hiện tra cứu DNS trên mạng.

Liệt kê 2. Một ví dụ tốt hơn từ ilovejackdaniel's

function check_email_address[$email] {
  // First, we check that there's one @ symbol, 
  // and that the lengths are right.
  if [!ereg["^[^@]{1,64}@[^@]{1,255}$", $email]] {
    // Email invalid because wrong number of characters 
    // in one section or wrong number of @ symbols.
    return false;
  }
  // Split it into sections to make life easier
  $email_array = explode["@", $email];
  $local_array = explode[".", $email_array[0]];
  for [$i = 0; $i < sizeof[$local_array]; $i++] {
    if
[!ereg["^[[[A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&
↪'*+/=?^_`{|}~\.-]{0,63}]|[\"[^[\\|\"]]{0,62}\"]]$",
$local_array[$i]]] {
      return false;
    }
  }
  // Check if domain is IP. If not, 
  // it should be valid domain name
  if [!ereg["^\[?[0-9\.]+\]?$", $email_array[1]]] {
    $domain_array = explode[".", $email_array[1]];
    if [sizeof[$domain_array] < 2] {
        return false; // Not enough parts to domain
    }
    for [$i = 0; $i < sizeof[$domain_array]; $i++] {
      if
[!ereg["^[[[A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9]]|
↪[[A-Za-z0-9]+]]$",
$domain_array[$i]]] {
        return false;
      }
    }
  }
  return true;
}

Yêu cầu

Các tài liệu của IETF, RFC 1035 Triển khai và đặc điểm kỹ thuật miền, RFC 2234 ABNF cho các thông số kỹ thuật của cú pháp, RFC 2821, Giao thức chuyển thư đơn giản thông tin liên quan đến xác thực địa chỉ e-mail. RFC 2822 thay thế RFC 822 Tiêu chuẩn cho tin nhắn văn bản internet ARPA và làm cho nó lỗi thời.

Sau đây là các yêu cầu cho một địa chỉ e-mail, với các tài liệu tham khảo có liên quan:

  1. Một địa chỉ e-mail bao gồm phần cục bộ và miền được phân tách bằng ký tự AT [@] [RFC 2822 3.4.1].

  2. Phần cục bộ có thể bao gồm các ký tự chữ cái và số, và các ký tự sau:!, #, $, %, &, ', *, +, -, /,,? } và ~, có thể với các dấu phân cách chấm [.], bên trong, nhưng không phải ở đầu, kết thúc hoặc bên cạnh một dấu tách chấm khác [RFC 2822 3.2.4].

  3. Phần cục bộ có thể bao gồm một chuỗi được trích dẫn, đó là bất cứ điều gì trong trích dẫn ["], bao gồm cả khoảng trắng [RFC 2822 3.2.5].

  4. Các cặp được trích dẫn [chẳng hạn như \@] là các thành phần hợp lệ của một phần cục bộ, mặc dù dạng lỗi thời từ RFC 822 [RFC 2822 4.4].

  5. Độ dài tối đa của một phần cục bộ là 64 ký tự [RFC 2821 4.5.3.1].

  6. Một miền bao gồm các nhãn được phân tách bằng các dấu phân cách DOT [RFC1035 2.3.1].

  7. Các nhãn miền bắt đầu với một ký tự chữ cái theo sau là các ký tự chữ cái bằng 0 hoặc nhiều hơn, ký tự số hoặc dấu gạch nối [-], kết thúc bằng ký tự chữ cái hoặc số [RFC 1035 2.3.1].

  8. Độ dài tối đa của nhãn là 63 ký tự [RFC 1035 2.3.1].

  9. Độ dài tối đa của một miền là 255 ký tự [RFC 2821 4.5.3.1].

  10. Miền phải đủ điều kiện và có thể giải quyết được với bản ghi địa chỉ DNS loại A hoặc loại MX [RFC 2821 3.6].

Yêu cầu số bốn bao gồm một hình thức hiện đã lỗi thời được cho là có thể cho phép. Các đại lý phát hành địa chỉ mới có thể không cho phép nó một cách hợp pháp; Tuy nhiên, một địa chỉ hiện có sử dụng biểu mẫu này vẫn là một địa chỉ hợp lệ.

Tiêu chuẩn giả định mã hóa ký tự bảy bit, không phải các ký tự đa dạng. Do đó, theo RFC 2234, chữ cái bảng chữ cái tương ứng với ký tự bảng chữ cái Latin dao động A, Z Z và A Z. Tương tự như vậy, số Numeric Numeric đề cập đến các chữ số 0. Bảng chữ cái Unicode tiêu chuẩn quốc tế đáng yêu không được cung cấp, thậm chí không được mã hóa là UTF-8. ASCII vẫn còn quy tắc ở đây.

Phát triển trình xác thực e-mail tốt hơn

Đó là rất nhiều yêu cầu! Hầu hết trong số họ đề cập đến phần địa phương và miền. Sau đó, nó có ý nghĩa để bắt đầu với việc phân tách địa chỉ e-mail xung quanh bộ phân tách AT. Các yêu cầu 2 Vang5 áp dụng cho phần cục bộ và 6 trận10 áp dụng cho miền.

Các dấu hiệu có thể được thoát ra trong tên địa phương. Các ví dụ là, ABC \@[Email & NBSP; được bảo vệ] và "[Email & NBSP; được bảo vệ]"@example.com. Điều này có nghĩa là một vụ nổ trên dấu AT, $ split = explode ["@", $ email]; hoặc một thủ thuật tương tự khác để tách các bộ phận cục bộ và miền sẽ không luôn luôn hoạt động. Chúng ta có thể thử loại bỏ thoát tại các dấu hiệu, $ cleanat = str_replace ["\\@", ""] ;, nhưng điều đó sẽ bỏ lỡ các trường hợp bệnh lý, chẳng hạn như ABC \\@example.com. May mắn thay, như vậy đã trốn thoát tại các dấu hiệu không được phép trong phần miền. Sự xuất hiện cuối cùng của Dấu hiệu AT chắc chắn phải là dấu phân cách. Cách để tách các bộ phận cục bộ và miền, sau đó, là sử dụng hàm strrpos để tìm dấu cuối cùng trong chuỗi e-mail.

Liệt kê 3 cung cấp một phương pháp tốt hơn để phân tách phần cục bộ và miền của địa chỉ e-mail. Loại trả về của Strrpos sẽ có giá trị giả có giá trị boolean nếu dấu hiệu tại sao không xảy ra trong chuỗi e-mail.

Liệt kê 3. Tách phần và miền địa phương

$isValid = true;
$atIndex = strrpos[$email, "@"];
if [is_bool[$atIndex] && !$atIndex]
{
   $isValid = false;
}
else
{
   $domain = substr[$email, $atIndex+1];
   $local = substr[$email, 0, $atIndex];
   // ... work with domain and local parts
}

Hãy bắt đầu với những thứ dễ dàng. Kiểm tra độ dài của phần cục bộ và miền là đơn giản. Nếu những bài kiểm tra đó thất bại, không cần phải thực hiện các bài kiểm tra phức tạp hơn. Liệt kê 4 cho thấy mã để thực hiện các bài kiểm tra độ dài.

Liệt kê 4. Kiểm tra độ dài cho bộ phận và miền địa phương

$localLen = strlen[$local];
$domainLen = strlen[$domain];
if [$localLen < 1 || $localLen > 64]
{
   // local part length exceeded
   $isValid = false;
}
else if [$domainLen < 1 || $domainLen > 255]
{
   // domain part length exceeded
   $isValid = false;
}

Bây giờ, phần địa phương có một trong hai hình thức. Nó có thể có một báo giá bắt đầu và kết thúc mà không có trích dẫn nhúng không được đăng ký. Phần địa phương, Doug \ "Ace \" L. là một ví dụ. Mẫu thứ hai cho phần cục bộ là, [a+[\. A+]*], trong đó một đại diện cho một loạt các ký tự cho phép. Hình thức thứ hai là phổ biến hơn so với đầu tiên; Vì vậy, hãy kiểm tra điều đó đầu tiên. Tìm kiếm biểu mẫu được trích dẫn sau khi thất bại trong hình thức chưa được trích xuất.

Các ký tự được trích dẫn bằng cách sử dụng dấu gạch chéo phía sau [\@] đặt ra một vấn đề. Hình thức này cho phép nhân đôi ký tự lạch ngược để có được một ký tự trượt ngược trong kết quả được giải thích [\\]. Điều này có nghĩa là chúng ta cần kiểm tra một số lượng các ký tự trượt ngược trích dẫn một ký tự không phải là hậu vệ. Chúng ta cần cho phép \\\\\\\@ và từ chối \\\\\@.

Có thể viết một biểu thức thông thường tìm thấy một số lần cắt ngược lại trước một ký tự không phải là người đánh dấu. Nó là có thể, nhưng không đẹp. Kháng cáo được giảm bớt bởi thực tế là nhân vật trượt ngược là một nhân vật thoát trong các chuỗi PHP và một nhân vật thoát trong các biểu thức thông thường. Chúng ta cần viết bốn ký tự trượt ngược trong chuỗi PHP đại diện cho biểu thức chính quy để hiển thị trình thông dịch biểu thức chính quy một dấu gạch chéo.

Một giải pháp hấp dẫn hơn chỉ đơn giản là loại bỏ tất cả các cặp ký tự ngược từ chuỗi thử nghiệm trước khi kiểm tra nó bằng biểu thức thông thường. Hàm str_replace phù hợp với hóa đơn. Liệt kê 5 cho thấy một bài kiểm tra cho nội dung của phần địa phương.

Liệt kê 5. Kiểm tra một phần cho nội dung bộ phận địa phương hợp lệ

if [!preg_match['/^[\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-]]+$/',
                str_replace["\\\\","",$local]]]
{
   // character not valid in local part unless 
   // local part is quoted
   if [!preg_match['/^"[\\\\"|[^"]]+"$/', 
                   str_replace["\\\\","",$local]]]
   {
      $isValid = false;
   }
}

Biểu thức chính quy trong thử nghiệm bên ngoài tìm kiếm một chuỗi các ký tự được phép hoặc thoát ra. Không thành công, bài kiểm tra bên trong tìm kiếm một chuỗi các ký tự trích dẫn thoát ra hoặc bất kỳ ký tự nào khác trong một cặp trích dẫn.

Nếu bạn đang xác thực một địa chỉ e-mail được nhập dưới dạng dữ liệu bài đăng, có khả năng, bạn phải cẩn thận về đầu vào có chứa các ký tự ngược lại [\], một đoạn giới thiệu ['] hoặc kép ["]. Có thể hoặc không thể thoát khỏi các ký tự đó với một ký tự trượt phụ ở bất cứ nơi nào chúng xảy ra trong dữ liệu bài đăng. Tên cho hành vi này là Magic_quotes_GPC, nơi GPC là viết tắt của Get, Post, Cookie. ] và dải chém được thêm vào trên một phản hồi khẳng định. Bạn cũng có thể đảm bảo rằng tệp PHP.INI vô hiệu hóa tính năng này.

Hai biểu thức chính quy trong Liệt kê 5 là hấp dẫn vì chúng tương đối dễ hiểu và không yêu cầu lặp lại nhóm ký tự cho phép, [A-A-Z0-9!#%& _ = \\/$ \ '*** +?^{} | ~ .-]. Đây là một bài kiểm tra cho bạn. Tại sao nhóm nhân vật yêu cầu hai ký tự trượt ngược trước khi chém về phía trước và một ký tự chém ngược trước khi trích dẫn?

Một sự thiếu hụt của bài kiểm tra bên ngoài của Danh sách 5 là nó vượt qua các chuỗi phần cục bộ bao gồm các dấu chấm ở bất cứ đâu trong chuỗi. Yêu cầu số hai nói rằng các dấu chấm không thể bắt đầu hoặc kết thúc phần cục bộ và chúng không thể xuất hiện cùng nhau hai lần trở lên. Chúng ta có thể giải quyết vấn đề này bằng cách mở rộng biểu thức chính quy bên ngoài thành dạng ^[a+[\. A+]+] $, trong đó a [\\\\\. \/$ \ '*+?^{} | ~-]]. Chúng ta có thể, nhưng điều đó dẫn đến một biểu thức dài, khó đọc, lặp đi lặp lại, khó tin vào. Rõ ràng hơn để thêm các kiểm tra đơn giản được hiển thị trong Liệt kê 6.

Liệt kê 6. Kiểm tra vị trí chấm trong phần cục bộ.

if [$local[0] == '.' || $local[$localLen-1] == '.']
{
   // local part starts or ends with '.'
   $isValid = false;
}
else if [preg_match['/\\.\\./', $local]]
{
   // local part has two consecutive dots
   $isValid = false;
}

Phần địa phương là một bọc. Mã bây giờ kiểm tra tất cả các yêu cầu bộ phận cục bộ. Kiểm tra tên miền sẽ hoàn thành xác thực e-mail. Mã này có thể kiểm tra tất cả các nhãn trong miền riêng biệt, cũng như mã yêu thích rượu whisky được hiển thị trong Danh sách 2, nhưng, như gợi ý trước đó, giải pháp được trình bày ở đây cho phép kiểm tra DNS thực hiện hầu hết các công việc xác thực miền.

Liệt kê 7 thực hiện kiểm tra chữ ký để đảm bảo chỉ các ký tự hợp lệ trong phần miền, không có dấu chấm lặp lại. Nó tiếp tục để thực hiện tra cứu DNS cho MX và một bản ghi. Nó chỉ làm cho kiểm tra cho bản ghi A chỉ khi kiểm tra bản ghi MX không thành công. Mã trong liệt kê 4 đã xác minh độ dài của giá trị miền.

Liệt kê 7. Kiểm tra miền

if [!preg_match['/^[A-Za-z0-9\\-\\.]+$/', $domain]]
{
   // character not valid in domain part
   $isValid = false;
}
else if [preg_match['/\\.\\./', $domain]]
{
   // domain part has two consecutive dots
   $isValid = false;
}
else if [![checkdnsrr[$domain,"MX"] || checkdnsrr[$domain, "A"]]]
{
   // domain not found in DNS
   $isValid = false;
}

Vì vậy, nó có tốt không? Bạn quyết định. Nhưng, thật tuyệt khi kiểm tra logic để đảm bảo rằng ít nhất nó là chính xác. Liệt kê 8 chứa một loạt các trường hợp kiểm tra địa chỉ e-mail mà bất kỳ xác thực e-mail nào cũng sẽ được truyền.

Hãy chắc chắn chạy thử nghiệm để xem các địa chỉ e-mail hợp lệ và bị từ chối, việc kéo dài gấp đôi [\\] bên trong các chuỗi PHP có xu hướng làm xáo trộn các địa chỉ. Bạn được thử thách để đưa mã xác thực e-mail yêu thích của mình vào bài kiểm tra này. Hãy yên tâm rằng mã trong Danh sách 9 không vượt qua!

Liệt kê 9 chứa một chức năng hoàn chỉnh để xác thực địa chỉ e-mail. Nó không súc tích như nhiều người khác, nó chắc chắn không phải là một lớp lót. Nhưng, thật đơn giản khi đọc và hiểu, và nó chấp nhận và từ chối chính xác các địa chỉ e-mail mà nhiều chức năng được công bố khác đã từ chối và chấp nhận không chính xác. Hàm đặt hàng các bài kiểm tra xác nhận gần như theo chi phí ngày càng tăng. Đặc biệt, biểu thức chính quy phức tạp hơn và, chắc chắn, tra cứu DNS, cả hai đều đến cuối cùng.

Liệt kê 9. Hàm xác thực e-mail hoàn chỉnh

/**
Validate an email address.
Provide email address [raw input]
Returns true if the email address has the email 
address format and the domain exists.
*/
function validEmail[$email]
{
   $isValid = true;
   $atIndex = strrpos[$email, "@"];
   if [is_bool[$atIndex] && !$atIndex]
   {
      $isValid = false;
   }
   else
   {
      $domain = substr[$email, $atIndex+1];
      $local = substr[$email, 0, $atIndex];
      $localLen = strlen[$local];
      $domainLen = strlen[$domain];
      if [$localLen < 1 || $localLen > 64]
      {
         // local part length exceeded
         $isValid = false;
      }
      else if [$domainLen < 1 || $domainLen > 255]
      {
         // domain part length exceeded
         $isValid = false;
      }
      else if [$local[0] == '.' || $local[$localLen-1] == '.']
      {
         // local part starts or ends with '.'
         $isValid = false;
      }
      else if [preg_match['/\\.\\./', $local]]
      {
         // local part has two consecutive dots
         $isValid = false;
      }
      else if [!preg_match['/^[A-Za-z0-9\\-\\.]+$/', $domain]]
      {
         // character not valid in domain part
         $isValid = false;
      }
      else if [preg_match['/\\.\\./', $domain]]
      {
         // domain part has two consecutive dots
         $isValid = false;
      }
      else if
[!preg_match['/^[\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-]]+$/',
                 str_replace["\\\\","",$local]]]
      {
         // character not valid in local part unless 
         // local part is quoted
         if [!preg_match['/^"[\\\\"|[^"]]+"$/',
             str_replace["\\\\","",$local]]]
         {
            $isValid = false;
         }
      }
      if [$isValid && ![checkdnsrr[$domain,"MX"] || 
 ↪checkdnsrr[$domain,"A"]]]
      {
         // domain not found in DNS
         $isValid = false;
      }
   }
   return $isValid;
}

Thông báo! Có một số nguy hiểm rằng việc sử dụng phổ biến và mã hóa cẩu thả rộng rãi sẽ thiết lập một tiêu chuẩn thực tế cho các địa chỉ e-mail hạn chế hơn so với tiêu chuẩn chính thức được ghi lại. Nếu bạn muốn đánh lừa các spambots, hãy áp dụng một địa chỉ e-mail như, {^c \@** dog^}@cartoon.com. Thật không may, bạn cũng có thể đánh lừa một số trang web thương mại điện tử hợp pháp là tốt. Bạn cho rằng sẽ thích nghi nhanh hơn?

Douglas Lovell là một kỹ sư phần mềm của IBM Research, tác giả của cuốn cẩm nang của nhà phát triển định dạng XSL được xuất bản bởi SAMS và biên tập viên trang web cho IAC52.org.The XSL Formatting Objects Developer's Handbook published by Sams, and Web site editor for iac52.org.

Bài Viết Liên Quan

Chủ Đề