2012-02-11 34 views
53

Tôi đang làm việc trên một email xác thực regex trong PHP và tôi cần phải biết bao lâu TLD có thể có thể được và vẫn còn hợp lệ. Tôi đã thực hiện một vài tìm kiếm nhưng không thể tìm thấy nhiều thông tin về chủ đề này. Vậy TLD có thể là bao lâu?TLD có thể là bao lâu?

+1

Bạn nên đọc "[? Làm thế nào để sử dụng một biểu thức chính quy để xác nhận một địa chỉ email] (http://stackoverflow.com/questions/201323/how-to-use-a-regular-expression-to-validate-an-email-địa chỉ) ". – Saxoier

+1

Như đã lưu ý trong nhiều câu hỏi liên quan, xác nhận email của regex là đáng ngờ nhất. Xem thêm ví dụ: http://stackoverflow.com/questions/201323/how-to-use-a-regular-expression-to-validate-an-email-addresses – tripleee

+3

Xin vui lòng, xin vui lòng, xin vui lòng không cuộn giải pháp của riêng bạn để này well- Giải quyết vấn đề. Sử dụng xác thực được tích hợp sẵn của PHP hoặc thư viện của bên thứ ba tuân thủ RFC, được kiểm tra tốt, như ['is_email'] (http://code.google.com/p/isemail/). Hãy nhớ rằng, cách ** chỉ ** để thực sự biết nếu địa chỉ email hợp lệ là gửi thư đến địa chỉ đó và yêu cầu người dùng thực hiện hành động dựa trên nội dung của thư. – Charles

Trả lời

46

DNS cho phép tối đa 63 ký tự cho một nhãn riêng lẻ.

+10

là 64? tôi thấy 63 ở đây: http://en.wikipedia.org/wiki/Domain_Name_System#cite_ref-rfc1034_1-2 tôi có bỏ qua một cái không? –

+2

Cảm ơn bạn đã hỏi. Tôi không nhớ đã nghiên cứu sâu rộng về vấn đề này, vì vậy tôi có lẽ đã googled nó vào thời điểm đó. Tôi sẽ chỉnh sửa câu hỏi và để lại lời cảm ơn này. – tripleee

+0

mát mẻ, miễn là tôi sẽ không tinh thần –

7

-EDIT-

Theo RFC 2606 .localhost là tên miền dành riêng và độ dài của nó là 9 ký tự. Đó là thời gian dài nhất tôi biết.

-END OF EDIT-

Tuy nhiên, tôi nghĩ bạn nên quan tâm đến độ dài địa chỉ email và không chỉ chiều dài TLD. Dưới đây là báo giá từ this bài viết. Độ dài địa chỉ email là 254 ký tự:

Dường như có sự nhầm lẫn về kích thước địa chỉ email hợp lệ tối đa. Hầu hết mọi người tin rằng nó là 320 ký tự (64 ký tự cho tên người dùng + 255 ký tự cho tên miền + 1 ký tự cho ký hiệu @). Các nguồn khác đề xuất 129 (64 + 1 + 64) hoặc 384 (128 + 1 + 255, giả sử tên người dùng tăng gấp đôi trong tương lai). Sự nhầm lẫn này có nghĩa là bạn nên chú ý đến 'nguyên tắc mạnh mẽ' ("các nhà phát triển nên viết cẩn thận phần mềm tuân thủ chặt chẽ với RFC tồn tại nhưng chấp nhận và phân tích cú pháp đầu vào từ các đồng nghiệp có thể không phù hợp với RFC." - Wikipedia) phần mềm đề cập đến địa chỉ email. Hơn nữa, một số phần mềm có thể bị tê liệt bởi các giả định ngây thơ, ví dụ: nghĩ rằng 50 ký tự là đủ (examples). Địa chỉ email 200 ký tự của bạn có thể có giá trị về mặt kỹ thuật nhưng điều đó sẽ không giúp bạn nếu hầu hết các trang web hoặc ứng dụng từ chối nó.

Chiều dài email tối đa thực tế hiện nay là 254 ký tự:

"Phiên bản gốc của RFC 3696 đã thực sự nói 320 là chiều dài tối đa, nhưng John Klensin (ICANN) sau đó chấp nhận này đã sai."

"Điều này phát sinh từ số học đơn giản có độ dài tối đa của một tên miền (255 ký tự) + độ dài tối đa của hộp thư (64 ký tự) + ký hiệu @ = 320 ký tự. Có một hạn chế từ RFC5321 trên phần tử đường dẫn của giao dịch SMTP có 256 ký tự nhưng điều này bao gồm các dấu ngoặc nhọn quanh địa chỉ email, do đó độ dài tối đa của địa chỉ email là 254 ký tự. "

+0

Đó là một điểm tốt và tôi đã đưa vào tài khoản (tôi thực sự đọc bài viết này trước đó). Tuy nhiên, tôi tin rằng nó là có lợi để kiểm tra chiều dài TLD để đảm bảo một người nào đó không chỉ cần gõ 'something @ random.adskjnadskbjads'. –

+1

Theo RFC 2606 .localhost là tên miền dành riêng và độ dài của nó là 9 ký tự – aviad

+0

@aviad: Nhưng '.localhost' và bạn bè có lẽ không nên hiển thị trong một địa chỉ email đang hoạt động. Tôi cho rằng đó là điều xác thực. Tuy nhiên, –

7

dài nhất với chữ cái la tinh là .MUSEUM (source), nhưng có một số với các ký tự đặc biệt. Dài nhất từ ​​chúng là XN - CLCHC0EA0B2G2A9GCD. Ngoài ra, trong một thời gian ngắn, nó sẽ có thể dự trữ TLD của riêng bạn với một mức giá cao và do đó, nó sẽ có thể được lâu hơn.

47

TLD dài nhất hiện tồn tại là 24 ký tự và có thể thay đổi. Độ dài TLD tối đa được chỉ định bởi RFC 1034 là 63 octet.

Để có được chiều dài của TLD hiện lâu nhất:

wget -qO - http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L 

Đây là những gì lệnh có quyền này:

  1. Lấy latest list of actual existing TLDs từ IANA
  2. Dải dòng đầu tiên, đó là một chặng đường dài -ish nhận xét
  3. Khởi chạy wc để đếm dòng dài nhất

Alternative sử dụng curl nhờ Stefan:

curl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L 
+4

bây giờ là 24 giờ :) nếu bạn không có wget ở đây là lựa chọn thay thế curl 'curl -s http://data.iana.org/TLD/tlds-alpha -by-domain.txt | tail -n + 2 | wc -L' –

+5

Đây không phải là câu trả lời cho câu hỏi "nó có thể là bao lâu" - đó chỉ là câu trả lời cho câu hỏi dài nhất hiện đang được sử dụng. – NickG

+1

'wc -L' cũng không phải là di động, mặc dù nó dễ dàng để viết một kịch bản Awk mà subsumes các chức năng của' tail -n + 2 | wc -L'; ví dụ. 'awk 'NR> 1 {if (length ($ 0) 1 && length ($ 0)> 23'' – tripleee

0

Đây là PHP mã để có được up-to-date thanh dọc tách UTF-8 danh sách tên miền cấp cao sẽ được sử dụng trực tiếp trong một biểu thức chính quy:

<?php 
    function getTLDs($separator){ 
    $tlds=file('http://data.iana.org/TLD/tlds-alpha-by-domain.txt'); 
    array_shift($tlds); // remove heading comment 
    usort($tlds,function($a,$b){ return strlen($b)-strlen($a); }); // sort from longest to shortest 
    return implode($separator,array_map(function($e){ return idn_to_utf8(trim(strtolower($e))); },$tlds)); 
    } 
    echo getTLDs('|'); 
?> 

Bạn có thể thấy nó hoạt động here.

Để phù hợp với một host name bạn có thể sử dụng nó như thế này:

$tlds=getTLDs('|'); 
if (preg_match("{([\da-z\.-]+)\.($tlds)}u",$address)) { 
    .. 
} 
Các vấn đề liên quan