Bunun biraz eski bir gönderi olduğunu biliyorum, ancak buradaki tüm normal ifadelerde çok önemli bir bileşen eksik: IDN alan adları desteği.
IDN alan adları xn-- ile başlar. Alan adlarında genişletilmiş UTF-8 karakterlerini etkinleştirirler. Örneğin, "♡ .com" un geçerli bir alan adı olduğunu biliyor muydunuz? Evet, "aşk kalp nokta com"! Alan adını doğrulamak için, http://xn--c6h.com/ adresinin doğrulamayı geçmesine izin vermeniz gerekir .
Bu normal ifadeyi kullanmak için, alanı küçük harfe dönüştürmeniz ve ayrıca alan adlarını ACE'ye ("ASCII Uyumlu Kodlama" olarak da bilinir) kodladığınızdan emin olmak için bir IDN kitaplığı kullanmanız gerekeceğini unutmayın. İyi bir kitaplık GNU-Libidn'dir.
idn (1), uluslararasılaştırılmış alan adı kitaplığının komut satırı arayüzüdür. Aşağıdaki örnek, UTF-8'deki ana bilgisayar adını ACE kodlamasına dönüştürür. Sonuçta elde edilen URL https: //nic.xn--flw351e/ daha sonra https: // nic'in ACE kodlu eşdeğeri olarak kullanılabilir . 谷 歌 / .
$ idn --quiet -a nic.谷歌
nic.xn--flw351e
Bu sihirli normal ifade, çoğu alanı kapsamalıdır (yine de, kaçırdığım birçok geçerli uç durum olduğundan eminim):
^((?!-))(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,})$
Bir etki alanı doğrulama normal ifadesi seçerken, alanın aşağıdakilerle eşleşip eşleşmediğini görmelisiniz:
- xn--stackoverflow.com
- stackoverflow.xn - com
- stackoverflow.co.uk
Bu üç alan geçmiyorsa, normal ifadeniz meşru alan adlarına izin vermiyor olabilir!
Check out Oracle'ın Uluslararası Dil Çevre Kılavuzu Uluslararası Alan Adları Destek sayfasını daha fazla bilgi için.
Burada normal ifadeyi denemekten çekinmeyin: http://www.regexr.com/3abjr
ICANN , bazı IDN etki alanlarının örneklerini görmek için kullanılabilen, yetkilendirilmiş tld'lerin bir listesini tutar .
Düzenle:
^(((?!-))(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,})$
Bu normal ifade, ana bilgisayar adının sonunda '-' bulunan etki alanlarının geçerli olarak işaretlenmesini durduracaktır. Ek olarak, sınırsız alt alan adlarına izin verir.