11
votes

Comment obtenir le nom de domaine uniquement à l'aide de JavaScript?

Je veux obtenir un nom de domaine uniquement à l'aide de JavaScript. Ex xxx

merci!

EDIT: "Domaine" = domaine sans extension (ex: .com, .net, .fr ...) et sans Sous-domaine (Ex: www, email, CDN, support ...)


5 commentaires

Cela devra-t-il fonctionner sur tous les domaines? Et sinon, quels types de domaines travaillez-vous? ( subd.subd.domain.com , domain.com , http:/domain.com , 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, ...


11 Réponses :


0
votes

C'est simple: xxx


10 commentaires

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 ou court stackoverflow.com 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 ?


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?



31
votes

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)


8 commentaires

@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 renvoie "qld" lorsque "EPA" pourrait être attendu. www.edu.com 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 ne fait pas partie d'un domaine de niveau supérieur. Correction www.edu.com . 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 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 , xxx.co.uk est à la fois valide et dans les deux xxx est le "nom de domaine". D'autre part, co.uk n'est pas une adresse valide, tandis que be.at 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 , le numéro de port est également inclus, (si spécifié) contrairement à fenêtre.location.hostname , voir cette référence: bl.ocks.org/abernier/3070589



1
votes

Le seul moyen que je puisse imaginer, c'est répertorier tout le TLD. Exemple de code comme ci-dessous. XXX

Array.Prototype.indexOf doit faire une solution dans IE.


0 commentaires

0
votes

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');
}


0 commentaires

2
votes
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

1 commentaires

Vous devriez ajouter une explication / description autour de vos réponses pour aider l'affiche.



11
votes

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: xxx

violon & tests @ http://jsfiddle.net/mzpaf/2/

critiques / pensées Bienvenue.


2 commentaires

www.gov.com , www.edu.com 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



1
votes

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)

JavaScript - Obtenez le nom de domaine hors sous-domaine

Pour supprimer l'extension, vous pouvez ensuite utiliser le premier élément d'un str.split ('.') [0]


3 commentaires

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.



0
votes

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;
}


0 commentaires

-2
votes
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

0 commentaires

-1
votes

Qu'en est-il de cela? XXX


1 commentaires

Co.uk serait le nom de domaine dans ce cas :)



-1
votes

Regex que j'utilise uniquement pour obtenir un nom de domaine: ([^.] * [.]) {0,} ([^.] *) *) Le domaine peut être trouvé dans la deuxième partie.


1 commentaires

Échoue sur www.example.co.uk . La deuxième partie est co