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?
php
regex
email-validation
tld
HellaMad
quelle
quelle
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.Antworten:
DNS erlaubt maximal 63 Zeichen für eine einzelne Bezeichnung.
quelle
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:
wc
um die längste Zeile zu zählenAlternative Verwendung
curl
dank Stefan:curl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L
quelle
curl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L
wc -L
ist auch nicht portabel, obwohl es einfach ist, ein Awk-Skript zu schreiben, das die Funktionalität vontail -n+2 | wc -L
; zBawk '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, mitXN--VERMGENSBERATUNG-PWB
, aka.vermögensberatung
. Eine schnelle Überprüfung, die viel einfacher zu tippen ist, istawk 'NR>1 && length($0)>23'
-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:
quelle
[email protected]
..localhost
und Freunde sollten wahrscheinlich nicht in einer funktionierenden E-Mail-Adresse auftauchen. Ich nehme an, dafür ist die Validierung gedacht.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.
quelle
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>
quelle
Dies ist
PHP
Code, um eine aktuelle, durch vertikale Balken getrennteUTF-8
TLD-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)) { .. }
quelle
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.
quelle