웹 애플리케이션을 개발하다 보면 사용자가 입력한 도메인 이름이 올바른 형식인지 확인해야 하는 경우가 자주 발생합니다. PHP에서는 preg_match 함수와 정규 표현식을 조합하여 도메인 이름의 유효성을 손쉽게 검사할 수 있습니다.
검사 항목 이해하기
도메인 이름이 유효한지 판단하기 위해서는 일반적으로 다음 세 가지 기준을 확인합니다.
- 허용되는 문자 검사: 도메인은 영문 소문자, 숫자, 하이픈(-)으로만 구성되어야 합니다.
- 전체 길이 검사: 도메인 이름 전체 길이는 최대 253자를 초과할 수 없습니다.
- 각 라벨 길이 검사: 점(.)으로 구분된 각 라벨(예: www, example, com)은 최대 63자까지 허용됩니다.
예제 코드
<?php
function is_valid_domain_name($domain_name) {
return (
preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name) // 허용 문자 검사
&& preg_match("/^.{1,253}$/", $domain_name) // 전체 길이 검사
&& preg_match("/^[^.]{1,63}(\.[^.]{1,63})*$/", $domain_name) // 각 라벨 길이 검사
);
}
?>사용 방법
정의한 함수에 도메인 이름을 인수로 전달하여 호출하면 됩니다.
$domain_name = 'tutorialspoint.com';
if (is_valid_domain_name($domain_name)) {
echo "유효한 도메인 이름입니다.";
} else {
echo "유효하지 않은 도메인 이름입니다.";
}출력 결과
유효한 도메인 이름입니다.
코드 설명
위 코드에서 사용자가 직접 정의한 is_valid_domain_name 함수는 세 개의 preg_match 호출 결과를 논리 AND(&&)로 결합합니다. 즉, 세 가지 조건이 모두 충족되어야만 true를 반환합니다.
- 첫 번째 정규 표현식은 도메인에 포함될 수 있는 문자(영문자, 숫자, 하이픈)와 라벨 구조를 검증하며,
i수정자를 통해 대소문자를 구분하지 않습니다. - 두 번째 정규 표현식은 전체 문자열 길이가 1자 이상 253자 이하인지 확인합니다.
- 세 번째 정규 표현식은 점으로 구분된 각 라벨이 63자를 넘지 않는지 검사합니다.
주의 사항
이 함수는 순수한 도메인 이름(예: example.com)을 기준으로 동작합니다. 만약 https://example.com처럼 프로토콜이나 경로가 포함된 URL 전체를 전달하면 검사에 실패할 수 있으므로, 필요하다면 parse_url() 함수를 사용해 호스트 부분만 추출한 후 검사하는 것이 좋습니다.