2013-07-23 8 views
1

est-il une bonne méthode là-bas qui va vérifier pour voir si une chaîne est un chemin relatifDéterminer si un chemin est relatif ou absolu en Javascript

Exemples:

path = «/absolu /chemin de";

chemin

= "relatif/chemin/vers"

chemin

= "http://www.absolutePathAsWellWithoutTrailingSlash.com"

path = "file: ///www.absolutePathAsWellWithoutTrailingSlash.com"

Vous pouvez voir que vérifier juste pour une barre oblique ne fera pas, pour déterminer si elle est absolue ou relative.

Existe-t-il une bonne méthode pour cela, ou devrais-je l'écrire moi-même?

+1

Vérifiez si le premier caractère est une barre oblique? –

+1

Je voudrais vérifier le schéma et les deux des entailles et du côlon peut-être (au-dessus de ma tête). –

+0

@ColeJohnson qui ne fera malheureusement pas, comme mentionné dans la question :) – momomo

Répondre

10

Ou vous pouvez utiliser une expression régulière:

function isPathAbsolute(path) { 
    return /^(?:\/|[a-z]+:\/\/)/.test(path); 
} 
+0

Cela semble bon. Probablement mieux que de compter sur le DOM. – Paulpro

+0

Super sabof, j'étais dans la même ligne ... pointe d'amélioration, test d'utilisation et (?: Non groupant, peu importe dans le test mais peut-être que ça pourrait accélérer les choses: p – momomo

+1

Je suppose que ça serait un peu plus propre. – sabof

2

Quelque chose comme cela peut fonctionner (je ne l'ai pas testé):

function isAbsolute(path){ 
    var a = document.createElement('a'); 
    a.href = path; 
    return a.host !== location.host || a.protocol !== location.protocol; 
} 

Notez que si les points d'URL absolue du même domaine et protocole que la page en cours, cela renvoie false.

+1

note que a.host est une propriété relativement nouvelle ... – dandavis

0

C'est ce que je suis venu avec:

new RegExp("^(?:/|.+://)").test(path) 

soutient tous mentionnés dans la question et:

path = « // same/as/the/protocol.com/abc

+0

Ceci ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article. –

+0

Comment ça?Il retourne vrai si absolu et faux si relatif – momomo

+2

J'ai eu l'impression que vous n'avez pas répondu à votre propre question mais juste mettez quelque chose que vous aviez mais ne fonctionniez pas dans une réponse au lieu de dans votre question originale (qui aurait dû être à votre question ou un commentaire). Je m'excuse si ce n'est pas le cas. S'il vous plaît supprimer le "C'est ce que j'ai à partir de maintenant" si cela est une solution de travail, juste pour éviter la confusion future. –

Questions connexes