도메인 이름을 확인해야합니다.
google.com
stackoverflow.com
따라서 가장 원시적 인 형태의 도메인은 www와 같은 하위 도메인도 아닙니다.
- 문자는 az | AZ | 0-9 및 마침표 (.) 및 대시 (-)
- 도메인 이름 부분은 대시 (-)로 시작하거나 끝나서는 안됩니다 (예 : -google-.com).
- 도메인 이름 부분은 1 ~ 63 자 사이 여야합니다.
확장 (TLD)은 현재 # 1 규칙에 따라 무엇이든 될 수 있습니다. 나중에 목록과 비교하여 유효성을 검사 할 수 있지만 1 자 이상이어야합니다.
편집 : TLD는 분명히 2-6 자입니다.
아니. 4 개정 됨 : TLD는 .co.uk와 같은 것을 포함해야하므로 실제로 “하위 도메인”이라는 레이블이 지정되어야합니다. 가능한 유일한 유효성 검사 (목록에 대한 검사는 제외)는 ‘첫 번째 점 뒤에 하나 또는 규칙 # 1에 따라 더 많은 문자
정말 고마워요, 제가 시도했다고 믿으세요!
답변
음, 특정 요구 사항을 고려할 때 보이는 것보다 약간 더 간단 합니다 (댓글 참조).
/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$/
그러나 이것은 많은 유효한 도메인을 거부합니다.
답변
나는 이것이 약간 오래된 게시물이라는 것을 알고 있지만 여기의 모든 정규식에는 IDN 도메인 이름 지원이라는 매우 중요한 구성 요소가 누락되었습니다.
IDN 도메인 이름 은 xn--로 시작합니다. 도메인 이름에 확장 된 UTF-8 문자를 사용할 수 있습니다. 예를 들어 “♡ .com”이 유효한 도메인 이름이라는 것을 알고 계셨습니까? 네, “러브 하트 닷컴”! 도메인 이름을 확인하려면 http://xn--c6h.com/ 이 확인을 통과 하도록해야합니다 .
이 정규식을 사용하려면 도메인을 소문자로 변환하고 IDN 라이브러리를 사용하여 도메인 이름을 ACE로 인코딩해야합니다 ( “ASCII 호환 인코딩”이라고도 함). 좋은 라이브러리 중 하나는 GNU-Libidn입니다.
idn (1)은 국제화 된 도메인 이름 라이브러리에 대한 명령 줄 인터페이스입니다. 다음 예제는 UTF-8의 호스트 이름을 ACE 인코딩으로 변환합니다. 결과 URL https : //nic.xn--flw351e/ 는 https : // nic. 谷 歌 /에 해당하는 ACE 인코딩 된 URL 로 사용할 수 있습니다 .
$ idn --quiet -a nic.谷歌
nic.xn--flw351e
이 마법의 정규 표현식은 대부분의 도메인을 포함 해야 합니다 (하지만 내가 놓친 유효한 엣지 케이스가 많이 있다고 확신합니다).
^((?!-))(xn--)?[a-z0-9][a-z0-9-_]{0,61}[a-z0-9]{0,1}\.(xn--)?([a-z0-9\-]{1,61}|[a-z0-9-]{1,30}\.[a-z]{2,})$
도메인 유효성 검사 정규식을 선택할 때 도메인이 다음과 일치하는지 확인해야합니다.
- xn--stackoverflow.com
- stackoverflow.xn--com
- stackoverflow.co.uk
이 세 도메인이 통과하지 못하면 정규 표현식이 합법적 인 도메인을 허용하지 않을 수 있습니다!
체크 아웃 오라클의 국제 언어 환경 설명서에서 다국어 도메인 이름 지원 페이지 자세한 내용은.
여기에서 정규식을 사용해보십시오 : http://www.regexr.com/3abjr
ICANN 은 IDN 도메인의 몇 가지 예를 보는 데 사용할 수있는 위임 된 tld 목록을 유지 합니다.
편집하다:
^(((?!-))(xn--|_{1,1})?[a-z0-9-]{0,61}[a-z0-9]{1,1}\.)*(xn--)?([a-z0-9][a-z0-9\-]{0,60}|[a-z0-9-]{1,30}\.[a-z]{2,})$
이 정규식은 호스트 이름 끝에 ‘-‘가있는 도메인이 유효한 것으로 표시되는 것을 중지합니다. 또한 무제한 하위 도메인을 허용합니다.
답변
내 RegEx는 다음입니다.
^[a-zA-Z0-9][a-zA-Z0-9-_]{0,61}[a-zA-Z0-9]{0,1}\.([a-zA-Z]{1,6}|[a-zA-Z0-9-]{1,30}\.[a-zA-Z]{2,3})$
i.oh1.me 및 wow.british-library.uk 는 괜찮 습니다.
UPD
다음은 업데이트 된 규칙입니다.
^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9]))\.([a-zA-Z]{2,6}|[a-zA-Z0-9-]{2,30}\.[a-zA-Z]{2,3})$
https://www.debuggex.com/r/y4Xe_hDVO11bv1DV
지금은 확인 -
하거나 _
시작 또는 도메인 라벨의 끝.
답변
내 베팅 :
^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$
설명 :
도메인 이름은 세그먼트에서 작성됩니다. 다음은 하나의 세그먼트입니다 (최종 제외).
[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?
1-63 자일 수 있으며 ‘-‘로 시작하거나 끝나지 않습니다.
이제 ‘.’를 추가하십시오. 그것에 적어도 한 번 반복하십시오 :
(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+
그런 다음 2 ~ 63 자 길이의 최종 세그먼트를 첨부합니다.
[a-z0-9][a-z0-9-]{0,61}[a-z0-9]
여기에서 테스트하십시오 : http://regexr.com/3au3g
답변
사소한 수정일뿐입니다. 마지막 부분은 최대 6 개 여야합니다. 따라서
^[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6}$
가장 긴 TLD는 museum
(6 자)-http: //en.wikipedia.org/wiki/List_of_Internet_top-level_domains
답변
나를 위해 작동하지 않는 수락 된 답변은 다음을 시도하십시오.
^ ((?!-) [A-Za-z0-9-] {1,63} (? <!-) \.) + [A-Za-z] {2,6} $
검증을 위해이 단위 테스트 사례 를 방문하십시오 .
답변
이 답변은 이메일 호스트 이름과 같은 호스트 이름이 아닌 도메인 이름 (서비스 RR 포함)에 대한 것입니다.
^(?=.{1,253}\.?$)(?:(?!-|[^.]+_)[A-Za-z0-9-_]{1,63}(?<!-)(?:\.|$)){2,}$
기본적으로 mkyong의 대답 이며 추가로 다음과 같습니다.
- 길이 접두사 및 널 루트를 포함하여 최대 255 옥텟 길이.
- 후행 ‘.’허용 명시 적 DNS 루트의 경우.
- 서비스 도메인 RR에 선행 ‘_’허용 (버그 : _ 레이블에 대해 최대 15자를 적용하지 않으며 서비스 RR보다 하나 이상의 도메인이 필요하지 않음)
- 가능한 모든 TLD와 일치합니다.
- 하위 도메인 레이블을 캡처하지 않습니다.
부품 별
미리보기, 선택적 후행 리터럴 ‘.’을 사용하여 최대 길이를 ^ $에서 253 자로 제한합니다.
(?=.{1,253}\.?$)
미리보기, 다음 문자는 ‘-‘가 아니며 다음 ‘.’앞의 문자 뒤에 ‘_’가 없습니다. 즉, 레이블의 첫 번째 문자가 ‘-‘가 아니고 첫 번째 문자 만 ‘_’가되도록 강제합니다.
(?!-|[^.]+_)
라벨 당 허용되는 문자 중 1 ~ 63 자
[A-Za-z0-9-_]{1,63}
Lookbehind, 이전 문자는 ‘-‘가 아닙니다. 즉, 레이블의 마지막 문자가 ‘-‘가 아니도록 강제합니다.
(?<!-)
강제로 ‘.’ 마지막 레이블을 제외한 모든 레이블의 끝에는 선택 사항입니다.
(?:\.|$)
대부분 위와 결합하면 적어도 두 개의 도메인 수준이 필요하며 이는 정확하지는 않지만 일반적으로 합리적인 가정입니다. TLD 또는 정규화되지 않은 상대 하위 도메인 (예 : localhost, myrouter, to)을 허용하려면 {2,}에서 +로 변경합니다.
(?:(?!-|[^.]+_)[A-Za-z0-9-_]{1,63}(?<!-)(?:\.|$)){2,}
이 식에 대한 단위 테스트 입니다.