현재 위치: > 최신 기사 목록> 정규식 및 checkdnsrr 함수를 통해 도메인 이름 형식의 정확성을 확인하는 방법은 무엇입니까?

정규식 및 checkdnsrr 함수를 통해 도메인 이름 형식의 정확성을 확인하는 방법은 무엇입니까?

gitbox 2025-08-25

정규식 및 checkdnsrr 함수를 통해 도메인 이름 형식의 정확성을 확인하는 방법은 무엇입니까?

PHP에서 도메인 이름이 올바른 형식을 충족하는지 확인하는 것이 일반적인 요구 사항입니다. 일반적으로 두 가지 방법으로 확인할 수 있습니다. 하나는 형식 확인을 위해 정규식을 사용하고 다른 하나는 PHP의 내장 CheckDNSRR 함수를 통해 도메인 이름이 존재하는지 확인하는 것입니다. 이 기사는이 두 가지 방법을 깊이 탐색하고 도메인 이름을 효과적으로 검증하기 위해이를 결합하는 방법을 소개합니다.

1. 일반 표현식을 사용하여 도메인 이름 형식을 확인하십시오

정규 표현식은 문자열이 지정된 패턴을 준수하는지 빠르게 확인하는 강력한 도구입니다. 도메인 이름 형식을 확인할 때는 다음 주요 요소를 고려해야합니다.

  • 도메인 이름은 문자, 숫자, 짧은 수평선 및 지점으로 구성됩니다 ( . ).

  • 각 레이블 (부분적으로 도트로 분리)에는 하나 이상의 문자 또는 숫자가 포함되어야하며 짧은 수평선으로 시작하거나 끝날 수 없습니다.

  • 총 길이는 253자를 초과해서는 안됩니다.

다음은 도메인 이름 형식을 확인하기위한 정규식의 예입니다.

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">validate_domain_format</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$domain</span></span></span><span>) {
    </span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">'/^(?!-)[A-Za-z0-9-]{1,63}(?&lt;!-)\.(?!-)[A-Za-z0-9-]{1,63}(?&lt;!-)$/'</span></span><span>;
    
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_match</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$domain</span></span><span>);
}
</span></span>

설명하다:

  • ^(?! -) : 도메인 이름이 짧은 수평 선 ( - )으로 시작하지 않도록하십시오.

  • [a-za-z0-9-] {1,63} : 도메인 이름 (레이블)의 각 부분에는 길이가 1 ~ 63자인 문자, 숫자 및 짧은 수평 선이 포함될 수 있습니다.

  • (? <! -) : 도메인 이름이 짧은 수평 선 ( - )으로 끝나지 않도록하십시오.

  • \. : 매치 포인트 ( . ) 문자.

  • 이 정규식은 도메인 이름의 각 부분의 합법성과 형식을 보장합니다.

2. CheckDnsrr 함수를 사용하여 도메인 이름의 DNS 레코드를 확인하십시오.

정규 표현식은 도메인 이름 형식의 정확성을 확인할 수 있지만 도메인 이름이 실제로 존재하는지 확인할 수는 없습니다. 도메인 이름이 유효한지 확인하기 위해 PHP의 내장 checkDnsrr 함수를 사용할 수 있습니다. 도메인 이름에 해당 DNS 레코드가 있는지 확인하는 데 사용됩니다. 유효한 DNS 레코드가있는 경우 도메인 이름이 존재하고 액세스 할 수 있음을 의미합니다.

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">check_domain_exists</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$domain</span></span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">checkdnsrr</span></span><span>(</span><span><span class="hljs-variable">$domain</span></span><span>, </span><span><span class="hljs-string">"A"</span></span><span>); </span><span><span class="hljs-comment">// 조사하다 A 기록,도메인 이름이 유효한지를 의미합니다</span></span><span>
}
</span></span>

설명하다:

  • CheckDnsrr ($ domain, "a") :이 함수는 도메인 이름에 레코드가 있는지, 즉 도메인 이름과 관련된 IP 주소가 있는지 여부를 확인합니다. 그렇다면 도메인 이름이 유효하다는 것을 나타냅니다.

  • MX 매개 변수를 사용하여 도메인 이름에 메일 교환 레코드가 있는지 확인하거나 모든 매개 변수를 사용하여 DNS 레코드 유형이 있는지 확인할 수도 있습니다.

3. 정규 표현식과 CheckDnsrr 기능의 결합 된 사용

도메인 이름의 형식과 존재를 동시에 확인하기 위해 정규식과 checkdnsrr 함수의 조합을 사용할 수 있습니다. 다음 코드는이 공동 확인을 수행하는 방법을 보여줍니다.

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">validate_domain</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$domain</span></span></span><span>) {
    </span><span><span class="hljs-comment">// 먼저 도메인 이름 형식을 확인하십시오</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">validate_domain_format</span></span><span>(</span><span><span class="hljs-variable">$domain</span></span><span>)) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">"잘못된 도메인 이름 형식"</span></span><span>;
    }

    </span><span><span class="hljs-comment">// 然后조사하다域名是否存在</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">check_domain_exists</span></span><span>(</span><span><span class="hljs-variable">$domain</span></span><span>)) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">"도메인 이름이 존재하지 않습니다"</span></span><span>;
    }

    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">"도메인 이름이 정확하고 존재합니다"</span></span><span>;
}
</span></span>

사용의 예 :

 <span><span><span class="hljs-variable">$domain</span></span><span> = </span><span><span class="hljs-string">"example.com"</span></span><span>;

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">validate_domain</span></span><span>(</span><span><span class="hljs-variable">$domain</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>; </span><span><span class="hljs-comment">// 산출 "도메인 이름이 정확하고 존재합니다"</span></span><span>
</span></span>

4. 다른 예방 조치

  • 국제화 된 도메인 이름 (IDN) : 응용 프로그램에서 국제화 된 도메인 이름 (즉, 비 ASCII 문자가 포함 된 도메인 이름)을 지원 해야하는 경우 IDN_TO_ASCII () 함수를 사용하여 확인하기 전에 ASCII 인코딩으로 변환 할 수 있습니다.

  • 도메인 이름 길이 한계 : 표준에 따라 도메인 이름의 총 길이는 253자를 초과해서는 안됩니다. 사용자가 입력 한 도메인 이름 이이 길이를 초과하는 경우 추가 점검이 필요합니다.

  • 오류 처리 : CheckDnsrr 함수를 호출 할 때 DNS 해상도 오류가 발생할 수 있으므로 @ 기호를 사용하여 오류 출력을 억제하고 실제 상황에 따라 오류를 처리하는 것이 가장 좋습니다.

결론적으로

PHP 개발자는 일반 표현식과 checkdnsrr 기능을 결합하여 도메인 이름의 형식과 존재를 효율적으로 확인할 수 있습니다. 정규 표현식은 도메인 이름 형식이 표준을 충족하도록하고 CheckDNSRR 기능은 도메인 이름이 실제로 존재하는지 여부를 추가로 확인합니다. 이 2 요인 검증 방법은 도메인 이름 검증의 정확성과 신뢰성을 크게 향상시키고 형식 오류 또는 유효하지 않은 도메인 이름으로 인한 문제를 효과적으로 피할 수 있습니다.