Wiem, że jest to trochę stary post, ale we wszystkich wyrażeniach regularnych brakuje jednego bardzo ważnego elementu: obsługi nazw domen IDN.
Nazwy domen IDN zaczynają się od xn--. Umożliwiają rozszerzenie znaków UTF-8 w nazwach domen. Na przykład, czy wiesz, że „♡ .com” jest prawidłową nazwą domeny? Tak, „love heart dot com”! Aby zweryfikować nazwę domeny, musisz pozwolić http://xn--c6h.com/ przejść weryfikację.
Uwaga, aby użyć tego wyrażenia regularnego, musisz przekonwertować domenę na małe litery, a także użyć biblioteki IDN, aby zapewnić kodowanie nazw domen do ACE (znanego również jako „Kodowanie zgodne z ASCII”). Jedną dobrą biblioteką jest GNU-Libidn.
idn (1) to interfejs wiersza poleceń do międzynarodowej biblioteki nazw domen. Poniższy przykład konwertuje nazwę hosta w UTF-8 na kodowanie ACE. Powstały adres URL https: //nic.xn--flw351e/ może być następnie użyty jako zakodowany w ACE odpowiednik https: // nic. 谷 歌 / .
$ idn --quiet -a nic.谷歌
nic.xn--flw351e
To magiczne wyrażenie regularne powinno obejmować większość dziedzin (chociaż jestem pewien, że istnieje wiele ważnych przypadków skrajnych, które przegapiłem):
^((?!-))(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,})$
Wybierając wyrażenie regularne do weryfikacji domeny, powinieneś sprawdzić, czy domena jest zgodna z poniższym:
- xn--stackoverflow.com
- stackoverflow.xn - com
- stackoverflow.co.uk
Jeśli te trzy domeny nie przejdą pomyślnie, Twoje wyrażenie regularne może nie zezwalać na legalne domeny!
Sprawdź The stronę internationalized domain name wsparcie od Oracle International Language Environment Przewodnik po więcej informacji.
Możesz wypróbować to wyrażenie regularne tutaj: http://www.regexr.com/3abjr
ICANN przechowuje listę delegowanych plików TLD, na której można zobaczyć kilka przykładów domen IDN.
Edytować:
^(((?!-))(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,})$
To wyrażenie regularne zatrzyma domeny ze znakiem „-” na końcu nazwy hosta jako oznaczone jako prawidłowe. Dodatkowo umożliwia nieograniczoną liczbę subdomen.