program story

TLD는 얼마나 오래 걸릴 수 있습니까?

inputbox 2020. 11. 4. 07:58
반응형

TLD는 얼마나 오래 걸릴 수 있습니까?


PHP에서 이메일 유효성 검사 정규식을 작업 중이며 TLD가 얼마나 오래 유효하고 여전히 유효한지 알아야합니다. 몇 번 검색했지만 주제에 대한 많은 정보를 찾을 수 없었습니다. 그렇다면 TLD는 얼마나 오래 걸릴 수 있습니까?


DNS는 개별 레이블에 대해 최대 63자를 허용합니다.


현재 존재하는 가장 긴 TLD는 24 자이며 변경 될 수 있습니다. RFC 1034에 지정된 최대 TLD 길이 는 63 옥텟입니다.

가장 긴 기존 TLD의 길이를 얻으려면 :

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

이 명령이 수행하는 작업은 다음과 같습니다.

  1. IANA 에서 실제 기존 TLD최신 목록을 가져옵니다.
  2. 긴 주석 인 첫 번째 줄을 제거합니다.
  3. wc가장 긴 줄을 계산하기 위해 시작

curlStefan 덕분에 대체 사용 :

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

-편집하다-

RFC 2606에 따르면 .localhost는 예약 된 도메인 이름이며 길이는 9 자입니다. 그것이 내가 아는 가장 긴 시간입니다.

-편집 끝-

그러나 TLD 길이뿐만 아니라 이메일 주소 길이에도 신경을 써야한다고 생각합니다. 아래는 기사 의 인용문입니다 . 이메일 주소 길이는 254 자입니다.

최대 유효한 이메일 주소 크기에 대해 약간의 혼동이있는 것 같습니다. 대부분의 사람들은 320 자 (사용자 이름 64 자 + 도메인 255 자 + @ 기호 1 자)라고 생각합니다. 다른 출처에서는 129 (64 + 1 + 64) 또는 384 (128 + 1 + 255, 사용자 이름의 길이가 앞으로 두 배가된다고 가정)를 제안합니다.

이러한 혼동은 '견고성 원칙'에 유의해야 함을 의미합니다 ( "개발자는 기존 RFC를 밀접하게 준수하는 소프트웨어를 신중하게 작성해야하지만 해당 RFC와 일치하지 않을 수있는 동료의 입력을 수락하고 구문 분석해야합니다."- Wikipedia ) . 이메일 주소. 또한 일부 소프트웨어는 순진한 가정에 의해 손상 될 수 있습니다. 예를 들어 50 자이면 충분하다고 생각합니다 ( ). 200 자 이메일 주소는 기술적으로 유효 할 수 있지만 대부분의 웹 사이트 나 응용 프로그램에서 거부하는 경우 도움이되지 않습니다.

실제 최대 이메일 길이는 현재 254 자입니다.

" RFC 3696 의 원래 버전 은 실제로 320이 최대 길이라고 말했지만 John Klensin (ICANN)은 나중에 이것이 잘못되었다고 받아 들였습니다."

"이는 도메인의 최대 길이 (255 자) + 사서함의 최대 길이 (64 자) + @ 기호 = 320 자의 간단한 산술로 인해 발생합니다. 잘못되었습니다.이 카나드는 실제로 RFC3696 의 원본 버전에 문서화되어 있습니다. 정오표에서 수정되었습니다. 실제로 SMTP 트랜잭션의 경로 요소에 256 자의 RFC5321 제한 이 있습니다. 그러나 여기에는 이메일 주소 주변에 꺾쇠 괄호가 포함되어 있으므로 이메일 주소의 최대 길이는 254 자입니다. "


라틴 문자로 된 가장 긴 것은 .MUSEUM ( source )이지만 일부는 특수 문자가 있습니다. 가장 긴 것은 XN--CLCHC0EA0B2G2A9GCD입니다. 또한 단시간에 자신의 TLD를 높은 가격으로 예약 할 수있어 더 길어질 수 있습니다.


다음은 정규식에서 직접 사용할 PHP최신 세로 막대로 구분 된 UTF-8TLD 목록 을 가져 오는 코드입니다 .

<?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)) {
  ..
}

나는 .net 개발자이기 때문에 현재 사용 가능한 가장 긴 TLD를 결정하는 자바 스크립트 표현입니다. 이것은 RegEx에서 사용할 수있는 가장 긴 TLD의 길이를 반환합니다.

다음 코드 조각을 시도하십시오

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>

참고URL : https://stackoverflow.com/questions/9238640/how-long-can-a-tld-possibly-be

반응형