Il y a beaucoup de questions qui semblent traiter des variations de cette question. Mais ils ont tendance à être des réponses complexes de regex et j'espère pouvoir trouver quelque chose de plus simple.
Emplacement donné.Host valeurs de p> Comment puis-je obtenir le domaine racine Je pourrais faire quelque chose comme trouver la seconde pour durer Mon objectif est de créer des cookies existant dans tous les sous-domaines. Pour ce faire, j'ai besoin de trouver mysite.com code>? P>
. Code>, mais cela semble laid et ne fonctionnerait pas pour des TLD comme
.co.uk code>. . Si JQuery a un objet contenant ces informations, je suis heureux de l'utiliser. P>
.mysite.com code>. Je préférerais ne pas le corriger. P> p>
5 Réponses :
Vous ne pouvez pas appeler .co.uk comme TLD. Il est en fait un Deuxième domaine . Il sera donc toujours ambigu que quel est le domaine racine.
Cependant, vous pouvez répertorier tous les domaines de la TLD et le deuxième niveau disponibles et essayer de trouver un match. Mais ce sera une opération très coûteuse et fastidieuse.
Si vous voulez faire cela, cette Liste des TLDS et SLDS pourrait être utile:
p>
Compte tenu de la probabilité extrêmement faible que notre domaine change de quoi que ce soit autre chose que .com, encore moins à une SLD, j'ai codé quelque chose comme ça. La surcharge et la maintenance de Maintenir une liste de TLD ou de SLD et de comparer contre cela ne vaut pas la rémunération pour nous. p> p>
La bibliothèque TLDJS peut être utilisée si vous souhaitez éviter l'entretien vous-même. Il est basé sur la liste de suffixe publique de Mozilla
Vous voudrez peut-être utiliser emplacement.hostname code> plutôt que
hôte code> - voir Stackoverflow.com/questions/6725890/...
Si vous voulez tout sur une ligne - ou p> pour les entrées: Il retournera: 'foo.example. com ',' foo.bar.example.com ',' foo.bar.fizz.buzz.example.com ' code> p>
' example.com '< / code> p> p>
J'utilise ceci:
const rootDomain = s => { const r = /.*\.([^.]*[^0-9][^.]*\.[^.]*[^.0-9][^.]*$)/; return s.replace(r, '$1'); };
const rootDomain = '.' + window.location.hostname.split('.').slice(-2).join('.');
Bien que ce code puisse résoudre le problème, une bonne réponse doit également expliquer quel b> le code fait et comment b> cela aide.
@BDL Ce code est assez standard et expliquant de soi. Que pensez-vous de plus?
Je vous suggère de couper cela vers const racinedomaine = emplacement.hostname.split ('.'). Slice (-2) .join ('.'); Code>
Compte tenu d'une liste de TLD valides, cela ne devrait pas être difficile - au lieu de la seconde pour durer
. Code> Vous voulez le premier
. Code> (lecture de droite à gauche) après le TLD . Vous pouvez le faire avec une grande réégycle ou une boucle, mais ce dernier serait généralement moins efficace.
Une liste complète peut être trouvée ici: Publicsuffix.org Que vous utilisiez une regex ou une autre manière ne fera pas grand chose d'une différence que je suppose. En tout cas, vous devez considérer tous les TLD et SLDS publics. Jetez un coup d'œil à Stackoverflow.com/Questtions/4452916/... .
Il y a un projet de faire cela à github.com/riffraff/publicsuffix.js mais il prétend être brisé." Je n'ai pas essayé mais cela pourrait constituer la base de votre solution.
@Felixkling - merci, c'est parfait. Voter pour fermer ma propre question.
Si cela vous a vraiment aidé, vous pouvez également simplement supprimer votre question ... en disant :) Codage heureux!
Il existe des pays avec des domaines optionnels de 2e niveau (c'est-à-dire un certain domaine.xy et certains-domain.co.xy sont valides). Je ne pense pas que vous puissiez faire une solution générique (raisonnablement petite). Il suffit de mettre la constante dans un fichier de configuration et de l'imprimer si nécessaire.