Sto lavorando a una regex di convalida della posta elettronica in PHP e ho bisogno di sapere per quanto tempo il TLD potrebbe essere ed essere ancora valido. Ho fatto alcune ricerche ma non sono riuscito a trovare molte informazioni sull'argomento. Quindi, quanto può durare un TLD?Quanto può essere lungo un TLD?
risposta
DNS consente un massimo di 63 caratteri per una singola etichetta.
è 64? vedo 63 qui: http://en.wikipedia.org/wiki/Domain_Name_System#cite_ref-rfc1034_1-2 ne ho trascurato uno? –
Grazie per avermelo chiesto. Non ricordo di aver fatto ricerche approfondite su questo, quindi probabilmente l'ho cercato su Google in quel momento. Modificherò la domanda e lascerò questa nota di ringraziamento. – tripleee
cool, fintanto che non sto diventando mentalmente –
operativa -Editazione-
Secondo RFC 2606 .localhost è riservato nome di dominio e la sua lunghezza è di 9 caratteri. Questo è il più lungo di cui sono a conoscenza.
-FINE EDIT-
Tuttavia, penso che si dovrebbe preoccuparsi di lunghezza indirizzo e-mail e non solo la lunghezza TLD. Segue una citazione dall'articolo this. La lunghezza indirizzo e-mail è di 254 caratteri:
Ci sembra essere una confusione sulla dimensione massima indirizzo email valido. La maggior parte delle persone crede che sia 320 caratteri (64 caratteri per il nome utente + 255 caratteri per il dominio + 1 carattere per il simbolo @). Altre fonti suggeriscono 129 (64 + 1 + 64) o 384 (128 + 1 + 255, assumendo che il nome utente raddoppi in lunghezza in futuro).
Questa confusione significa che si dovrebbe prestare attenzione al "principio di robustezza" ("gli sviluppatori dovrebbero scrivere attentamente software che aderisce strettamente alle RFC esistenti ma accettare e analizzare input da colleghi che potrebbero non essere coerenti con tali RFC." - Wikipedia) durante la scrittura software che si occupa di indirizzi email. Inoltre, alcuni software potrebbero essere azzoppati da supposizioni ingenue, ad es. pensando che 50 caratteri siano adeguati (examples). Il tuo indirizzo email di 200 caratteri potrebbe essere tecnicamente valido, ma ciò non ti aiuterà se la maggior parte dei siti web o delle applicazioni lo rifiuteranno.
La lunghezza effettiva massima e-mail è attualmente 254 caratteri:
"La versione originale di RFC 3696 ha effettivamente dire che 320 era la lunghezza massima, ma John Klensin (ICANN) successivamente accettato questo era sbagliato."
"Questo deriva dalla semplice aritmetica della lunghezza massima di un dominio (255 caratteri) + lunghezza massima di una casella di posta (64 caratteri) + il simbolo @ = 320 caratteri. di RFC3696. È stato corretto nell'errata.Vi è in realtà una restrizione da RFC5321 sull'elemento di percorso di una transazione SMTP di 256 caratteri.Ma questo include parentesi angolari attorno all'indirizzo di posta elettronica, quindi la lunghezza massima di un indirizzo di posta elettronica è 254 caratteri. "
Questo è un buon punto e ne avevo già preso in considerazione (in realtà ho letto questo articolo in precedenza). Tuttavia, ritengo sia vantaggioso controllare la lunghezza del TLD per garantire che qualcuno non scriva semplicemente "something @ random.adskjnadskbjads". –
Secondo RFC 2606 .localhost è un nome di dominio riservato e la sua lunghezza è 9 caratteri – aviad
@aviad: Ma '.localhost' e gli amici probabilmente non dovrebbero apparire in un indirizzo email funzionante. Presumo che sia per quello che serve la validazione. –
Il più lungo con le lettere latino è .museum (source), ma ci sono alcuni con i caratteri speciali. Il più lungo da loro è XN - CLCHC0EA0B2G2A9GCD. Inoltre, in breve tempo, sarà possibile prenotare il proprio TLD ad un prezzo elevato e quindi sarà più lungo.
Il TLD più lungo attualmente esistente è lungo 24 caratteri e soggetto a modifiche. La lunghezza massima TLD specificata da RFC 1034 è di 63 ottetti.
per ottenere la lunghezza della più lunga TLD esistente:
wget -qO - http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L
Ecco che cosa il comando fa:
- Prendi il latest list of actual existing TLDs da IANA
- Striscia la prima linea, che è una lunga -ish commento
- Lancio
wc
per contare la linea più lunga
alternativo utilizzando curl
grazie Stefan:
curl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L
è 24 ora :) se non hai wget qui è l'alternativa curl 'curl -s http://data.iana.org/TLD/tlds-alpha -by-domain.txt | coda -n + 2 | wc -L' –
Questa non è la risposta alla domanda "quanto a lungo può essere" - è solo una risposta a quello che è il più lungo attualmente in uso. – NickG
'wc -L' non è anche portatile, sebbene sia facile scrivere uno script Awk che include la funzionalità di' tail -n + 2 | wc -L'; per esempio. 'awk 'NR> 1 {if (length ($ 0)
Questo è PHP
codice di alzarsi aggiornati barra verticale separato UTF-8
elenco TLD da utilizzare direttamente in un'espressione regolare:
<?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('|');
?>
Puoi vederlo in azione here.
per abbinare un nome host è possibile utilizzare in questo modo:
$tlds=getTLDs('|');
if (preg_match("{([\da-z\.-]+)\.($tlds)}u",$address)) {
..
}
Si dovrebbe leggere "[? Come usare un'espressione regolare per convalidare un'indirizzi e-mail] (http://stackoverflow.com/questions/201323 /)" how-to-use-a-regular-expression-to-validate-an-indirizzi e-mail. – Saxoier
Come notato in molte domande correlate, la convalida della posta elettronica tramite regex è dubbia nella migliore delle ipotesi. Vedi anche per es. http://stackoverflow.com/questions/201323/how-to-use-a-regular-expression-to-validate-an-email-addresses – tripleee
Si prega, per favore, non rollare la propria soluzione a questo well- problema risolto. Utilizza la convalida integrata di PHP o una libreria di terze parti eccellente, ben collaudata e conforme alle norme RFC, come ['is_email'] (http://code.google.com/p/isemail/). Ricorda, il ** solo ** modo per sapere veramente se un indirizzo email è valido è quello di inviare una mail ad esso e richiedere all'utente di agire in base ai contenuti della posta. – Charles