Je veux obtenir un nom de domaine uniquement à l'aide de JavaScript. Ex merci! P> EDIT: "Domaine" = domaine sans extension (ex: .com, .net, .fr ...) et sans Sous-domaine (Ex: www, email, CDN, support ...) p> p>
11 Réponses :
C'est simple:
J'ai testé avec les deux et ça marche. Au moins en ff. Peut-être que du navigateur bizarre?
Cela ne fonctionnera pas sur le domaine avec deux niveaux (comme .com.vn & co.uk). Par exemple, cela ne fonctionnera pas sur vn.search.yahoo.com.vn, il donnera "com" au lieu de "Yahoo". Voir jsfiddle.net/gagan/slekq
J'utilise Chrome ... Avez-vous vu mon lien?
J'ai compris. Cela ne fonctionnera pas pour de tels domaines, bien que saisissez le nom de domaine et le scinder et récupérer le nom réel sont deux tâches distinctes. Je pense que cela peut être utilisé pour affiner plus loin "algorithme" imho.
Les noms de domaine peuvent être longs: www.epa.qld.gov.au code> ou court
stackoverflow.com code> ou quoi que ce soit entre les deux. Qu'est-ce que vous appelez le "domaine" ici?
Selon l'auteur de la question, c'est par exemple "BBC" de www.bbc.co.uk
Alors, quel est le domaine dans www.eepa.qld.gov.au code>?
Je n'ai pas d'idée. Mais ça compte?
@Robg 'QLD', simplement parce que ce n'est pas enregistré en tant que domaine de niveau supérieur. La définition de ce qu'il est après est en.wikipedia.org/wiki/seconde-level_domain
Le point est que l'OP n'a pas défini la partie d'un domaine qu'ils sont après, malgré leur demande. Il y a des comaines génériques (.com, .biz, .edu, etc.), des domaines de pays (.nz, .uk ,.uk, .us, etc.) domaines ou régionaux (.qld, .vic, etc.) et ainsi de suite . Notez également que SLDS change en fonction du TLD - il y a AC.UK ou EDU.AU, mais que faites-vous avec edu.biz ou ac.com?
Utiliser emplacement.host CODE> et couper les sous-domaines et le TLD:
// http://data.iana.org/TLD/tlds-alpha-by-domain.txt
var TLDs = ["ac", "ad", "ae", "aero", "af", "ag", "ai", "al", "am", "an", "ao", "aq", "ar", "arpa", "as", "asia", "at", "au", "aw", "ax", "az", "ba", "bb", "bd", "be", "bf", "bg", "bh", "bi", "biz", "bj", "bm", "bn", "bo", "br", "bs", "bt", "bv", "bw", "by", "bz", "ca", "cat", "cc", "cd", "cf", "cg", "ch", "ci", "ck", "cl", "cm", "cn", "co", "com", "coop", "cr", "cu", "cv", "cx", "cy", "cz", "de", "dj", "dk", "dm", "do", "dz", "ec", "edu", "ee", "eg", "er", "es", "et", "eu", "fi", "fj", "fk", "fm", "fo", "fr", "ga", "gb", "gd", "ge", "gf", "gg", "gh", "gi", "gl", "gm", "gn", "gov", "gp", "gq", "gr", "gs", "gt", "gu", "gw", "gy", "hk", "hm", "hn", "hr", "ht", "hu", "id", "ie", "il", "im", "in", "info", "int", "io", "iq", "ir", "is", "it", "je", "jm", "jo", "jobs", "jp", "ke", "kg", "kh", "ki", "km", "kn", "kp", "kr", "kw", "ky", "kz", "la", "lb", "lc", "li", "lk", "lr", "ls", "lt", "lu", "lv", "ly", "ma", "mc", "md", "me", "mg", "mh", "mil", "mk", "ml", "mm", "mn", "mo", "mobi", "mp", "mq", "mr", "ms", "mt", "mu", "museum", "mv", "mw", "mx", "my", "mz", "na", "name", "nc", "ne", "net", "nf", "ng", "ni", "nl", "no", "np", "nr", "nu", "nz", "om", "org", "pa", "pe", "pf", "pg", "ph", "pk", "pl", "pm", "pn", "pr", "pro", "ps", "pt", "pw", "py", "qa", "re", "ro", "rs", "ru", "rw", "sa", "sb", "sc", "sd", "se", "sg", "sh", "si", "sj", "sk", "sl", "sm", "sn", "so", "sr", "st", "su", "sv", "sy", "sz", "tc", "td", "tel", "tf", "tg", "th", "tj", "tk", "tl", "tm", "tn", "to", "tp", "tr", "travel", "tt", "tv", "tw", "tz", "ua", "ug", "uk", "us", "uy", "uz", "va", "vc", "ve", "vg", "vi", "vn", "vu", "wf", "ws", "xn--0zwm56d", "xn--11b5bs3a9aj6g", "xn--3e0b707e", "xn--45brj9c", "xn--80akhbyknj4f", "xn--90a3ac", "xn--9t4b11yi5a", "xn--clchc0ea0b2g2a9gcd", "xn--deba0ad", "xn--fiqs8s", "xn--fiqz9s", "xn--fpcrj9c3d", "xn--fzc2c9e2c", "xn--g6w251d", "xn--gecrj9c", "xn--h2brj9c", "xn--hgbk6aj7f53bba", "xn--hlcj6aya9esc7a", "xn--j6w193g", "xn--jxalpdlp", "xn--kgbechtv", "xn--kprw13d", "xn--kpry57d", "xn--lgbbat1ad8j", "xn--mgbaam7a8h", "xn--mgbayh7gpa", "xn--mgbbh1a71e", "xn--mgbc0a9azcg", "xn--mgberp4a5d4ar", "xn--o3cw4h", "xn--ogbpf8fl", "xn--p1ai", "xn--pgbs0dh", "xn--s9brj9c", "xn--wgbh1c", "xn--wgbl6a", "xn--xkc2al3hye2a", "xn--xkc2dl3a5ee0h", "xn--yfro4i67o", "xn--ygbi2ammx", "xn--zckzah", "xxx", "ye", "yt", "za", "zm", "zw"].join()
function getDomain(url){
var parts = url.split('.');
if (parts[0] === 'www' && parts[1] !== 'com'){
parts.shift()
}
var ln = parts.length
, i = ln
, minLength = parts[parts.length-1].length
, part
// iterate backwards
while(part = parts[--i]){
// stop when we find a non-TLD part
if (i === 0 // 'asia.com' (last remaining must be the SLD)
|| i < ln-2 // TLDs only span 2 levels
|| part.length < minLength // 'www.cn.com' (valid TLD as second-level domain)
|| TLDs.indexOf(part) < 0 // officialy not a TLD
){
return part
}
}
}
getDomain(location.host)
@demix oups. devrait valider le TLD: /
Cela fonctionnera dans des exemples donnés en question, mais comme Diplix a échoué échouera sur le domaine avec la longueur de nom de 2 et 3, spécialement de la chute de domaine de raccourcissement de l'URL dans cette catégorie.
Certains "cas de coin" du monde réel n'étaient pas trop difficiles à repérer: www.epa.qld.gov.au code> renvoie "qld" lorsque "EPA" pourrait être attendu.
www.edu.com code> renvoie "www" où "Edu" pourrait être attendu. L'OP n'a pas encore expliqué ce qu'un "domaine" est.
"QLD" est le domaine de deuxième niveau dans ce cas: www.qld.gov.au, qld code> ne fait pas partie d'un domaine de niveau supérieur. Correction
www.edu.com code>. Je ne connais personne qui fournit une liste complète des domaines de deuxième niveau de Cound-Code ..
Je suggérerais d'utiliser une bibliothèque comme Uri.js pour cela ( medialisze.github.com/uri.js ). C'est robuste et a une communauté décente.
Je ne comprends pas pourquoi vous avez besoin d'une liste de TLD de pays. Si cela se termine en 2 lettres, c'est un pays. La difficulté consiste à déterminer quels pays divisent correctement le reste de leur domaine. par exemple. Dans l'exemple ci-dessus "www.qld.gov.au" "qld" est pas i> le domaine de deuxième niveau, plus que "www.whitehouse.gov". Depuis seulement 4 pays qui n'ont pas vendu leurs droits TLD, vous n'avez besoin que de rechercher ceux-ci (supprimer deux niveaux) et de retirer 1 niveau pour le reste. À une conjecture, les seuls domaines de deux niveaux sont: .au, .uk, .nz, .ca (commentaire si j'ai manqué). Publicsuffix.org a une liste complète
@Orwellophile Si vous lisez cette réponse à nouveau, vous verrez que c'était l'approche initiale. xxx.uk code>,
xxx.co.uk code> est à la fois valide et dans les deux
xxx code> est le "nom de domaine". D'autre part,
co.uk code> n'est pas une adresse valide, tandis que
be.at code> pourrait être. Il n'existe aucun moyen de prendre en compte ces différences autres que de regarder la liste des TLD et SLD enregistrés.
Lorsque vous utilisez emplacement.host code>, le numéro de port est également inclus, (si spécifié) contrairement à
fenêtre.location.hostname code>, voir cette référence:
Le seul moyen que je puisse imaginer, c'est répertorier tout le TLD. Exemple de code comme ci-dessous. Array.Prototype.indexOf doit faire une solution dans IE. P> P>
J'avais besoin de le faire et fouetté quelque chose de simple qui représentait mon cas d'utilisation
function stripSubDomainAndTLD (domain) { return domain.replace(/^(?:[a-z0-9\-\.]+\.)??([a-z0-9\-]+)(?:\.com|\.net|\.org|\.biz|\.ws|\.in|\.me|\.co\.uk|\.co|\.org\.uk|\.ltd\.uk|\.plc\.uk|\.me\.uk|\.edu|\.mil|\.br\.com|\.cn\.com|\.eu\.com|\.hu\.com|\.no\.com|\.qc\.com|\.sa\.com|\.se\.com|\.se\.net|\.us\.com|\.uy\.com|\.ac|\.co\.ac|\.gv\.ac|\.or\.ac|\.ac\.ac|\.af|\.am|\.as|\.at|\.ac\.at|\.co\.at|\.gv\.at|\.or\.at|\.asn\.au|\.com\.au|\.edu\.au|\.org\.au|\.net\.au|\.id\.au|\.be|\.ac\.be|\.adm\.br|\.adv\.br|\.am\.br|\.arq\.br|\.art\.br|\.bio\.br|\.cng\.br|\.cnt\.br|\.com\.br|\.ecn\.br|\.eng\.br|\.esp\.br|\.etc\.br|\.eti\.br|\.fm\.br|\.fot\.br|\.fst\.br|\.g12\.br|\.gov\.br|\.ind\.br|\.inf\.br|\.jor\.br|\.lel\.br|\.med\.br|\.mil\.br|\.net\.br|\.nom\.br|\.ntr\.br|\.odo\.br|\.org\.br|\.ppg\.br|\.pro\.br|\.psc\.br|\.psi\.br|\.rec\.br|\.slg\.br|\.tmp\.br|\.tur\.br|\.tv\.br|\.vet\.br|\.zlg\.br|\.br|\.ab\.ca|\.bc\.ca|\.mb\.ca|\.nb\.ca|\.nf\.ca|\.ns\.ca|\.nt\.ca|\.on\.ca|\.pe\.ca|\.qc\.ca|\.sk\.ca|\.yk\.ca|\.ca|\.cc|\.ac\.cn|\.com\.cn|\.edu\.cn|\.gov\.cn|\.org\.cn|\.bj\.cn|\.sh\.cn|\.tj\.cn|\.cq\.cn|\.he\.cn|\.nm\.cn|\.ln\.cn|\.jl\.cn|\.hl\.cn|\.js\.cn|\.zj\.cn|\.ah\.cn|\.gd\.cn|\.gx\.cn|\.hi\.cn|\.sc\.cn|\.gz\.cn|\.yn\.cn|\.xz\.cn|\.sn\.cn|\.gs\.cn|\.qh\.cn|\.nx\.cn|\.xj\.cn|\.tw\.cn|\.hk\.cn|\.mo\.cn|\.cn|\.cx|\.cz|\.de|\.dk|\.fo|\.com\.ec|\.tm\.fr|\.com\.fr|\.asso\.fr|\.presse\.fr|\.fr|\.gf|\.gs|\.co\.il|\.net\.il|\.ac\.il|\.k12\.il|\.gov\.il|\.muni\.il|\.ac\.in|\.co\.in|\.org\.in|\.ernet\.in|\.gov\.in|\.net\.in|\.res\.in|\.is|\.it|\.ac\.jp|\.co\.jp|\.go\.jp|\.or\.jp|\.ne\.jp|\.ac\.kr|\.co\.kr|\.go\.kr|\.ne\.kr|\.nm\.kr|\.or\.kr|\.li|\.lt|\.lu|\.asso\.mc|\.tm\.mc|\.com\.mm|\.org\.mm|\.net\.mm|\.edu\.mm|\.gov\.mm|\.ms|\.nl|\.no|\.nu|\.pl|\.ro|\.org\.ro|\.store\.ro|\.tm\.ro|\.firm\.ro|\.www\.ro|\.arts\.ro|\.rec\.ro|\.info\.ro|\.nom\.ro|\.nt\.ro|\.se|\.si|\.com\.sg|\.org\.sg|\.net\.sg|\.gov\.sg|\.sk|\.st|\.tf|\.ac\.th|\.co\.th|\.go\.th|\.mi\.th|\.net\.th|\.or\.th|\.tm|\.to|\.com\.tr|\.edu\.tr|\.gov\.tr|\.k12\.tr|\.net\.tr|\.org\.tr|\.com\.tw|\.org\.tw|\.net\.tw|\.ac\.uk|\.uk\.com|\.uk\.net|\.gb\.com|\.gb\.net|\.vg|\.sh|\.kz|\.ch|\.info|\.ua|\.gov|\.name|\.pro|\.ie|\.hk|\.com\.hk|\.org\.hk|\.net\.hk|\.edu\.hk|\.us|\.tk|\.cd|\.by|\.ad|\.lv|\.eu\.lv|\.bz|\.es|\.jp|\.cl|\.ag|\.mobi|\.eu|\.co\.nz|\.org\.nz|\.net\.nz|\.maori\.nz|\.iwi\.nz|\.io|\.la|\.md|\.sc|\.sg|\.vc|\.tw|\.travel|\.my|\.se|\.tv|\.pt|\.com\.pt|\.edu\.pt|\.asia|\.fi|\.com\.ve|\.net\.ve|\.fi|\.org\.ve|\.web\.ve|\.info\.ve|\.co\.ve|\.tel|\.im|\.gr|\.ru|\.net\.ru|\.org\.ru|\.hr|\.com\.hr)$/, '$1'); }
var docdomain = document.domain.split('.'); var dom1 = ""; if (typeof (docdomain[docdomain.length - 2]) != 'undefined') dom1 = docdomain[docdomain.length - 2] + '.'; var domain = dom1 + docdomain[docdomain.length - 1]; console.log(domain); //without subdomains
Vous devriez ajouter une explication / description autour de vos réponses pour aider l'affiche.
Je cherchais quelque chose qui fonctionnerait pour la majorité des cas, sans avoir à maintenir la liste TLD (et sauter sa taille!). Il me semble que vous pouvez le faire assez précisément en recherchant à la place au domaine de la deuxième degré pour les commentaires: violon & tests @ http://jsfiddle.net/mzpaf/2/ p> critiques / pensées Bienvenue. P> p>
www.gov.com code>,
www.edu.com code> et des domaines similaires échouent tous.
Oui - pas parfait à coup sûr mais suffisant pour mes cas. Je suppose que vous pouvez vérifier que les parties [0] n'étaient aussi pas une SLD ordinaire
sans avoir une liste complète des TLD (qui aurait très longtemps). Si vous avez juste besoin du nom de domaine de la page en cours, vous pouvez utiliser ma technique (à l'aide de cookies pour rechercher le domaine racine) P>
JavaScript - Obtenez le nom de domaine hors sous-domaine p >
Pour supprimer l'extension, vous pouvez ensuite utiliser le premier élément d'un str.split ('.') [0] code> p> p>
C'est une excellente solution qui couvre beaucoup de cas d'angle. Pouvez-vous formater votre réponse avec l'exemple de code et l'ajout pour répondre à la question? Après cela, cette réponse peut être acceptée.
En outre, il manque d'explication qu'il peut ne pas fonctionner pour les scripts intégrés à iframe: développeur.mozilla.org/en-us/docs/web/security/...
Je sais que c'est une ancienne réponse, mais vous devriez inclure le code ici (dans la réponse) au cas où le site lié n'est pas disponible pour une raison quelconque à l'avenir - auquel cas cette réponse devient inutile.
Avec l'aide des exemples de code d'autres amis donnés ci-dessus, j'ai créé une fonction qui ne renvoiait que le nom de domaine et s'il n'est pas du domaine valide, par exemple, il manque ".com" selon mes besoins.
function getDomain(url){ var TLDs = ["ac", "ad", "ae", "aero", "af", "ag", "ai", "al", "am", "an", "ao", "aq", "ar", "arpa", "as", "asia", "at", "au", "aw", "ax", "az", "ba", "bb", "bd", "be", "bf", "bg", "bh", "bi", "biz", "bj", "bm", "bn", "bo", "br", "bs", "bt", "bv", "bw", "by", "bz", "ca", "cat", "cc", "cd", "cf", "cg", "ch", "ci", "ck", "cl", "cm", "cn", "co", "com", "coop", "cr", "cu", "cv", "cx", "cy", "cz", "de", "dj", "dk", "dm", "do", "dz", "ec", "edu", "ee", "eg", "er", "es", "et", "eu", "fi", "fj", "fk", "fm", "fo", "fr", "ga", "gb", "gd", "ge", "gf", "gg", "gh", "gi", "gl", "gm", "gn", "gov", "gp", "gq", "gr", "gs", "gt", "gu", "gw", "gy", "hk", "hm", "hn", "hr", "ht", "hu", "id", "ie", "il", "im", "in", "info", "int", "io", "iq", "ir", "is", "it", "je", "jm", "jo", "jobs", "jp", "ke", "kg", "kh", "ki", "km", "kn", "kp", "kr", "kw", "ky", "kz", "la", "lb", "lc", "li", "lk", "lr", "ls", "lt", "lu", "lv", "ly", "ma", "mc", "md", "me", "mg", "mh", "mil", "mk", "ml", "mm", "mn", "mo", "mobi", "mp", "mq", "mr", "ms", "mt", "mu", "museum", "mv", "mw", "mx", "my", "mz", "na", "name", "nc", "ne", "net", "nf", "ng", "ni", "nl", "no", "np", "nr", "nu", "nz", "om", "org", "pa", "pe", "pf", "pg", "ph", "pk", "pl", "pm", "pn", "pr", "pro", "ps", "pt", "pw", "py", "qa", "re", "ro", "rs", "ru", "rw", "sa", "sb", "sc", "sd", "se", "sg", "sh", "si", "sj", "sk", "sl", "sm", "sn", "so", "sr", "st", "su", "sv", "sy", "sz", "tc", "td", "tel", "tf", "tg", "th", "tj", "tk", "tl", "tm", "tn", "to", "tp", "tr", "travel", "tt", "tv", "tw", "tz", "ua", "ug", "uk", "us", "uy", "uz", "va", "vc", "ve", "vg", "vi", "vn", "vu", "wf", "ws", "xn--0zwm56d", "xn--11b5bs3a9aj6g", "xn--3e0b707e", "xn--45brj9c", "xn--80akhbyknj4f", "xn--90a3ac", "xn--9t4b11yi5a", "xn--clchc0ea0b2g2a9gcd", "xn--deba0ad", "xn--fiqs8s", "xn--fiqz9s", "xn--fpcrj9c3d", "xn--fzc2c9e2c", "xn--g6w251d", "xn--gecrj9c", "xn--h2brj9c", "xn--hgbk6aj7f53bba", "xn--hlcj6aya9esc7a", "xn--j6w193g", "xn--jxalpdlp", "xn--kgbechtv", "xn--kprw13d", "xn--kpry57d", "xn--lgbbat1ad8j", "xn--mgbaam7a8h", "xn--mgbayh7gpa", "xn--mgbbh1a71e", "xn--mgbc0a9azcg", "xn--mgberp4a5d4ar", "xn--o3cw4h", "xn--ogbpf8fl", "xn--p1ai", "xn--pgbs0dh", "xn--s9brj9c", "xn--wgbh1c", "xn--wgbl6a", "xn--xkc2al3hye2a", "xn--xkc2dl3a5ee0h", "xn--yfro4i67o", "xn--ygbi2ammx", "xn--zckzah", "xxx", "ye", "yt", "za", "zm", "zw"].join() url = url.replace(/.*?:\/\//g, ""); url = url.replace(/www./g, ""); var parts = url.split('/'); url = parts[0]; var parts = url.split('.'); if (parts[0] === 'www' && parts[1] !== 'com'){ parts.shift() } var ln = parts.length , i = ln , minLength = parts[parts.length-1].length , part // iterate backwards while(part = parts[--i]){ // stop when we find a non-TLD part if (i === 0 // 'asia.com' (last remaining must be the SLD) || i < ln-2 // TLDs only span 2 levels || part.length < minLength // 'www.cn.com' (valid TLD as second-level domain) || TLDs.indexOf(part) < 0 // officialy not a TLD ){ var actual_domain = part; break; //return part } } //console.log(actual_domain); var tid ; if(typeof parts[ln-1] != 'undefined' && TLDs.indexOf(parts[ln-1]) >= 0) { tid = '.'+parts[ln-1]; } if(typeof parts[ln-2] != 'undefined' && TLDs.indexOf(parts[ln-2]) >= 0) { tid = '.'+parts[ln-2]+tid; } if(typeof tid != 'undefined') actual_domain = actual_domain+tid; else actual_domain = actual_domain+'.com'; return actual_domain; }
function getDomainName( hostname ) { var TLDs = new RegExp(/\.(com|net|org|biz|ltd|plc|edu|mil|asn|adm|adv|arq|art|bio|cng|cnt|ecn|eng|esp|etc|eti|fot|fst|g12|ind|inf|jor|lel|med|nom|ntr|odo|ppg|pro|psc|psi|rec|slg|tmp|tur|vet|zlg|asso|presse|k12|gov|muni|ernet|res|store|firm|arts|info|mobi|maori|iwi|travel|asia|web|tel)(\.[a-z]{2,3})?$|(\.[^\.]{2,3})(\.[^\.]{2,3})$|(\.[^\.]{2})$/); return hostname.replace(TLDs, '').split('.').pop(); } /* TEST */ var domains = [ 'domain.com', 'subdomain.domain.com', 'www.subdomain.domain.com', 'www.subdomain.domain.info', 'www.subdomain.domain.info.xx', 'mail.subdomain.domain.co.uk', 'mail.subdomain.domain.xxx.yy', 'mail.subdomain.domain.xx.yyy', 'mail.subdomain.domain.xx', 'domain.xx' ]; var result = []; for (var i = 0; i < domains.length; i++) { result.push( getDomainName( domains[i] ) ); } alert ( result.join(' | ') ); // result: domain | domain | domain | domain | domain | domain | domain | domain | domain | domain
Qu'en est-il de cela?
Co.uk serait le nom de domaine dans ce cas :)
Regex que j'utilise uniquement pour obtenir un nom de domaine: ([^.] * [.]) {0,} ([^.] *) code> *)
Le domaine peut être trouvé dans la deuxième partie. P>
Échoue sur www.example.co.uk code>. La deuxième partie est
co code>
Cela devra-t-il fonctionner sur tous les domaines? Et sinon, quels types de domaines travaillez-vous? (
subd.subd.domain.com code>,
domain.com code>,
http:/domain.com code>, etc)
Quelle est votre définition de " domaine "?
Est-ce que cela le fait pour vous? jsfiddle.net/purmou/tzjje
Votre script est-il exécutant à l'intérieur de ce domaine? Si oui, je pourrais avoir une méthode plus facile
OP devrait répondre aux demandes de clarification, ...