Скільки часу може бути TLD?


78

Я працюю над регулярним виразом для перевірки електронної пошти в PHP, і мені потрібно знати, як довго може бути TLD і як і раніше діяти. Я зробив кілька пошуків, але не зміг знайти багато інформації по цій темі. Отже, як довго може бути TLD?



2
Як зазначалось у багатьох супутніх запитаннях, перевірка електронної пошти регулярним виразом у кращому випадку сумнівна. Дивіться також , наприклад , stackoverflow.com/questions/201323 / ...
tripleee

4
Будь ласка, будь ласка, не робіть власного рішення цієї добре вирішеної проблеми. Використовуйте вбудовану перевірку PHP або чудову, добре перевірену, сумісну з RFC сторонню бібліотеку, наприклад is_email. Пам’ятайте, єдиний спосіб по-справжньому дізнатися, чи є електронною адресою дійсною, - це надіслати на неї пошту та вимагати від користувача вчинити дії на основі вмісту пошти.
Чарльз

Крім того, не забувайте, що TLD змінюються регулярно, і з часом, коли gTLD почнуть існувати, все, що підтверджує відповідність відомим TLD, стане застарілим і важким для обслуговування.
Чарльз

@Charles Де написано, що він використовує PHP? Які ще існують способи перевірки без "прокатки власного рішення", враховуючи, що більшість рішень не можуть використовувати PHP (перевірка адреси електронної пошти майже завжди здійснюється на стороні клієнта).
NickG

Відповіді:


73

DNS допускає до 63 символів для окремої мітки.


13
це 64? я бачу тут 63: en.wikipedia.org/wiki/Domain_Name_System#cite_ref-rfc1034_1-2 я не помічав одного?
Question Mark

2
Спасибі за запитання. Я не пам’ятаю, щоб проводив великі дослідження з цього приводу, тому, напевно, я просто виконував їх у Google. Я відредагую запитання і залишу цю подяку.
триплі

69

Найдовший існуючий на даний момент TLD становить 24 символи і може бути змінений. Максимальна довжина TLD, визначена RFC 1034 становить 63 октета.

Щоб отримати довжину найдовшого існуючого TLD:

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

Ось що робить ця команда:

  1. Отримайте останній список фактично існуючих TLD від IANA
  2. Зачистіть перший рядок, що є довгим коментарем
  3. Запустіть, wcщоб порахувати найдовший рядок

Альтернативне використання curlзавдяки Стефану:

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

4
зараз 24 роки :) якщо у вас немає wget, ось альтернатива завиткиcurl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L
Стефан Рогін

6
Це не відповідь на запитання "як довго це може бути" - це лише відповідь на те, яке найдовше використовується зараз.
NickG

3
wc -Lтакож не є портативним, хоча легко написати сценарій Awk, який включає функціонал tail -n+2 | wc -L; наприклад, awk 'NR>1{ if (length($0) < max) next; longest=$0; max=length($0)} END { print max, longest }'який в якості додаткового бонусу також друкує найдовший TLD (або лише перший, якщо є кілька однакової довжини). Все ще у 24, з XN--VERMGENSBERATUNG-PWB, ака .vermögensberatung. Швидка перевірка, яку набирати набагато простіше,awk 'NR>1 && length($0)>23'
триплі

8

-Редагувати-

Відповідно до RFC 2606 .localhost - це зарезервоване доменне ім'я, його довжина становить 9 символів. Це найдовше, що мені відомо.

-ІЗМІНИТЬ-

Однак я думаю, що вам слід дбати про довжину адреси електронної пошти, а не лише про довжину домену. Нижче наведена цитата з цієї статті. Довжина адреси електронної пошти становить 254 символи:

Здається, існує певна плутанина щодо максимально допустимого розміру адреси електронної пошти. Більшість людей вважають, що це 320 символів (64 символи для імені користувача + 255 символів для домену + 1 символ для символу @). Інші джерела пропонують 129 (64 + 1 + 64) або 384 (128 + 1 + 255, припускаючи, що ім’я користувача вдвічі збільшиться).

Ця плутанина означає, що вам слід дотримуватися "принципу стійкості" ("розробники повинні ретельно писати програмне забезпечення, яке точно відповідає діючим RFC, але приймати та аналізувати введення від однолітків, які можуть не узгоджуватися з цими RFC". - Вікіпедія ), створюючи програмне забезпечення, яке має справу адреси електронної пошти. Крім того, деяке програмне забезпечення може бути скалічене наївними припущеннями, наприклад, вважаючи, що 50 символів достатньо ( приклади ). Ваша електронна адреса з 200 символів може бути технічно дійсною, але це не допоможе вам, якщо більшість веб-сайтів або програм відхиляють її.

Фактична максимальна довжина електронної пошти наразі становить 254 символи:

"Оригінальна версія RFC 3696 справді казала, що 320 - це максимальна довжина, але Джон Кленсін (ICANN) згодом визнав, що це було неправильно".

"Це пов'язано з простою арифметикою максимальної довжини домену (255 символів) + максимальної довжини поштової скриньки (64 символи) + символу @ = 320 символів. Неправильно. Цей слух фактично задокументовано в оригінальній версії RFC3696 . було виправлено в помилці. Насправді є обмеження від RFC5321 щодо елемента шляху SMTP-транзакції довжиною 256 символів. Але це включає кутові дужки навколо адреси електронної пошти, тому максимальна довжина адреси електронної пошти становить 254 символи. "


Це хороший момент і той, який я вже врахував (я фактично прочитав цю статтю раніше). Однак я вважаю, що вигідно перевірити довжину TLD, щоб хтось не просто вводив текст something@random.adskjnadskbjads.
HellaMad

1
Відповідно до RFC 2606 .localhost є зарезервованим доменним ім'ям і його довжина становить 9 символів
aviad

@aviad: Але .localhostдрузі, мабуть, не повинні з'являтися на робочій електронній адресі. Я припускаю, що для цього призначена перевірка.
Тихон Джелвіс

1
@ Тихон Джелвіс, погодився, однак, це все ще діє.
aviad

7

Найдовший з латинськими літерами - .MUSEUM ( джерело ), але є деякі зі спеціальними символами. Найдовший з них XN - CLCHC0EA0B2G2A9GCD. Крім того, за короткий час можна буде зарезервувати власний TLD за високу ціну, а отже, можна буде і довше.


2

Оскільки я розробник .net, далі йде подання сценарію java для визначення найдовшого TLD, який зараз доступний. Це поверне довжину найдовшого TLD, який ви могли б використовувати у своєму RegEx.

будь ласка, спробуйте наступний фрагмент коду

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>


0

Це PHPкод для отримання сучасного UTF-8списку TLD, розділених вертикальним рядком, який буде використовуватися безпосередньо в регулярному виразі:

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

Для відповідності імені хоста ви можете використовувати його так:

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

0

TLD може бути будь-якої довжини взагалі. Нові домени верхнього рівня постійно трапляються. У майбутньому буде більше TLD, які не регулюються суб'єктом, який в даний час регулює більшість TLD. Ми також не будемо використовувати електронну пошту в майбутньому, як зараз. Це сказав:

Вам не потрібно ніколи перевіряти адресу електронної пошти. Якщо ви хочете сповільнити людей і маєте уявлення про те, чи вони насправді люди, додайте CAPTCHA. Якщо вам потрібно підтвердити робочий електронний лист, надішліть електронне повідомлення із посиланням для перевірки, яке вони можуть відкрити. Якщо ви не обмежуєте подання речей, які можуть генерувати такі речі, як електронні листи, що надсилаються на перевірку, не має значення, підтверджуєте ви, що адреса в будь-якому випадку є технічно дійсною, незалежно від цього в ній буде зловживати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.