나는 이것이 약간 오래된 게시물이라는 것을 알고 있지만 여기의 모든 정규식에는 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,})$
이 정규식은 호스트 이름 끝에 '-'가있는 도메인이 유효한 것으로 표시되는 것을 중지합니다. 또한 무제한 하위 도메인을 허용합니다.