Wie lang kann eine TLD möglicherweise sein?

77

Ich arbeite an einem regulären Ausdruck für die E-Mail-Validierung in PHP und muss wissen, wie lange die TLD möglicherweise gültig sein könnte und noch gültig ist. Ich habe ein paar Suchen durchgeführt, konnte aber nicht viele Informationen zu diesem Thema finden. Wie lange kann eine TLD möglicherweise dauern?

HellaMad
quelle
2
Wie in vielen verwandten Fragen erwähnt, ist die E-Mail-Validierung durch Regex bestenfalls zweifelhaft. Siehe auch zB stackoverflow.com/questions/201323/…
Tripleee
4
Bitte, bitte, bitte rollen Sie keine eigene Lösung für dieses gut gelöste Problem. Verwenden Sie die integrierte Validierung von PHP oder eine ausgezeichnete, gut getestete, RFC-kompatible Bibliothek von Drittanbietern, wie z is_email. Denken Sie daran, dass der einzige Weg, um wirklich zu wissen, ob eine E-Mail-Adresse gültig ist, darin besteht, eine E-Mail an sie zu senden und den Benutzer aufzufordern, basierend auf dem Inhalt der E-Mail eine Aktion auszuführen.
Charles
Vergessen Sie auch nicht, dass sich TLDs regelmäßig ändern und dass mit der baldigen Einführung von gTLDs alles, was gegen bekannte TLDs validiert wird, veraltet und schwer zu warten sein wird.
Charles
@ Charles Wo steht, dass er PHP verwendet? Welche anderen Möglichkeiten gibt es, um zu validieren, ohne "Ihre eigene Lösung zu entwickeln", da die meisten Lösungen PHP nicht verwenden können (die Validierung der E-Mail-Adresse erfolgt fast immer clientseitig).
NickG

Antworten:

72

DNS erlaubt maximal 63 Zeichen für eine einzelne Bezeichnung.

Tripleee
quelle
12
ist es 64? Ich sehe 63 hier: en.wikipedia.org/wiki/Domain_Name_System#cite_ref-rfc1034_1-2 habe ich einen übersehen?
Fragezeichen
2
Danke für die Frage. Ich erinnere mich nicht daran, dass ich umfangreiche Nachforschungen angestellt habe, also habe ich es damals wahrscheinlich nur gegoogelt. Ich werde die Frage bearbeiten und diesen Dankesbrief hinterlassen.
Tripleee
69

Die längste derzeit existierende TLD ist 24 Zeichen lang und kann sich ändern. Die in RFC 1034 angegebene maximale TLD-Länge beträgt 63 Oktette.

So ermitteln Sie die Länge der längsten vorhandenen TLD:

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

Dieser Befehl bewirkt Folgendes:

  1. Holen Sie sich die neueste Liste der tatsächlich vorhandenen TLDs von IANA
  2. Entfernen Sie die erste Zeile, was ein langer Kommentar ist
  3. Starten Sie, wcum die längste Zeile zu zählen

Alternative Verwendung curldank Stefan:

curl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L
Dan Dascalescu
quelle
4
Es ist jetzt 24 :) Wenn Sie nicht wget hier haben, ist die Curl-Alternativecurl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L
Stefan Rogin
6
Dies ist nicht die Antwort auf die Frage "wie lange es möglicherweise dauern kann" - es ist nur eine Antwort auf die Frage, welche derzeit am längsten verwendet wird.
NickG
3
wc -List auch nicht portabel, obwohl es einfach ist, ein Awk-Skript zu schreiben, das die Funktionalität von tail -n+2 | wc -L; zB awk 'NR>1{ if (length($0) < max) next; longest=$0; max=length($0)} END { print max, longest }'was als zusätzlichen Bonus auch die längste TLD druckt (oder nur die erste, wenn es mehrere der gleichen Länge gibt). Immer noch mit 24, mit XN--VERMGENSBERATUNG-PWB, aka .vermögensberatung. Eine schnelle Überprüfung, die viel einfacher zu tippen ist, istawk 'NR>1 && length($0)>23'
Tripleee
8

-BEARBEITEN-

Laut RFC 2606 ist .localhost ein reservierter Domainname und hat eine Länge von 9 Zeichen. Das ist das längste, das mir bekannt ist.

-END OF EDIT-

Ich denke jedoch, dass Sie sich um die Länge der E-Mail-Adresse und nicht nur um die TLD-Länge kümmern sollten. Unten finden Sie ein Zitat aus diesem Artikel. Die Länge der E-Mail-Adresse beträgt 254 Zeichen:

Es scheint einige Verwirrung über die maximal gültige E-Mail-Adressgröße zu geben. Die meisten Leute glauben, dass es 320 Zeichen sind (64 Zeichen für den Benutzernamen + 255 Zeichen für die Domain + 1 Zeichen für das @ -Symbol). Andere Quellen schlagen 129 (64 + 1 + 64) oder 384 (128 + 1 + 255 vor, vorausgesetzt, der Benutzername wird sich in Zukunft verdoppeln).

Diese Verwirrung bedeutet, dass Sie das 'Robustheitsprinzip' ("Entwickler sollten Software, die eng mit vorhandenen RFCs übereinstimmt, aber Eingaben von Peers akzeptieren und analysieren, die möglicherweise nicht mit diesen RFCs übereinstimmen." - Wikipedia ) beachten, wenn Sie Software schreiben, die sich mit diesen Themen befasst E-mailadressen. Darüber hinaus kann einige Software durch naive Annahmen verkrüppelt werden, z. B. durch die Annahme, dass 50 Zeichen angemessen sind ( Beispiele ). Ihre 200-stellige E-Mail-Adresse ist möglicherweise technisch gültig, aber das hilft Ihnen nicht, wenn die meisten Websites oder Anwendungen sie ablehnen.

Die tatsächliche maximale E-Mail-Länge beträgt derzeit 254 Zeichen:

"Die ursprüngliche Version von RFC 3696 sagte tatsächlich, dass 320 die maximale Länge war, aber John Klensin (ICANN) akzeptierte später, dass dies falsch war."

„Dies ergibt sich aus der einfachen Arithmetik der maximalen Länge einer Domäne (255 Zeichen) + maximale Länge einer Mailbox (64 Zeichen) + das Symbol @ = 320 Zeichen. Falsch. Diese canard in der ursprünglichen Version von tatsächlich dokumentiert ist RFC3696 . Es wurde in den Errata korrigiert. Es gibt tatsächlich eine Einschränkung von RFC5321 für das Pfadelement einer SMTP-Transaktion mit 256 Zeichen. Dies schließt jedoch spitze Klammern um die E-Mail-Adresse ein, sodass die maximale Länge einer E-Mail-Adresse 254 Zeichen beträgt. "

aviad
quelle
Das ist ein guter Punkt, den ich bereits berücksichtigt hatte (ich habe diesen Artikel tatsächlich früher gelesen). Ich glaube jedoch, dass es vorteilhaft ist, die TLD-Länge zu überprüfen, um sicherzustellen, dass jemand nicht nur tippt [email protected].
HellaMad
1
Laut RFC 2606 ist .localhost ein reservierter Domainname und hat eine Länge von 9 Zeichen
aviad
@aviad: Aber .localhostund Freunde sollten wahrscheinlich nicht in einer funktionierenden E-Mail-Adresse auftauchen. Ich nehme an, dafür ist die Validierung gedacht.
Tikhon Jelvis
1
@Tikhon Jelvis, stimmte zu, dies gilt jedoch weiterhin.
Aviad
7

Das längste mit lateinischen Buchstaben ist .MUSEUM ( Quelle ), aber es gibt einige mit Sonderzeichen. Das längste von ihnen ist XN - CLCHC0EA0B2G2A9GCD. Außerdem wird es in kurzer Zeit möglich sein, Ihre eigene TLD zu einem hohen Preis zu reservieren, so dass es möglich sein wird, länger zu sein.

Axiomer
quelle
2

Da ich ein .net-Entwickler bin, folgt die Java-Skript-Darstellung zum Bestimmen der längsten derzeit verfügbaren TLD. Dies gibt die Länge der längsten TLD zurück, die Sie in Ihrem RegEx verwenden könnten.

Bitte versuchen Sie das folgende Code-Snippet

function getTLD() {
    var length = 0;
    var longest;
    var request = new XMLHttpRequest();

    request.open('GET', 'http://data.iana.org/TLD/tlds-alpha-by-domain.txt', true);
    request.send(null);
    request.onreadystatechange = function () {
        if (request.readyState === 4 && request.status === 200) {
            var type = request.getResponseHeader('Content-Type');
            if (type.indexOf("text") !== 1) {
                var tldArr = request.responseText.split('\n'); 
                tldArr.splice(0, 1);

                for (var i = 0; i < tldArr.length; i++) {
                    if (tldArr[i].length > length) {
                        length = tldArr[i].length;
                        longest = tldArr[i];
                    }
                } 

                console.log("Longest >> " + longest + " >> " + length);
                return length;
            }
        }
    }
}
<button onclick="getTLD()">Get TLD</button>

Chathura Edirisinghe
quelle
0

Dies ist PHPCode, um eine aktuelle, durch vertikale Balken getrennte UTF-8TLD-Liste zu erhalten, die direkt in einem regulären Ausdruck verwendet werden kann:

<?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('|');
?>

Um einen Hostnamen abzugleichen, können Sie ihn folgendermaßen verwenden:

$tlds=getTLDs('|');
if (preg_match("{([\da-z\.-]+)\.($tlds)}u",$address)) {
  ..
}
Meisner
quelle
0

Eine TLD kann beliebig lang sein. Es kommen ständig neue TLDs vor. In Zukunft wird es mehr TLDs geben, die nicht von dem Unternehmen reguliert werden, das derzeit die Mehrheit der TLDs reguliert. Wir werden auch in Zukunft keine E-Mails mehr verwenden, wie wir es derzeit tun. Das gesagt:

Sie müssen niemals eine E-Mail-Adresse validieren. Wenn Sie Menschen verlangsamen und eine Vorstellung davon haben möchten, ob sie tatsächlich Menschen sind, fügen Sie ein CAPTCHA hinzu. Wenn Sie eine funktionierende E-Mail bestätigen müssen, senden Sie eine E-Mail mit einem Validierungslink, den sie öffnen können. Wenn Sie die Übermittlung von Dingen nicht drosseln, die zum Senden von E-Mails zur Überprüfung führen können, spielt es keine Rolle, ob Sie bestätigen, dass die Adresse ohnehin technisch gültig ist. Sie wird zu diesem Zeitpunkt trotzdem missbraucht.

Jan Kyu Peblik
quelle