簡體   English   中英

確定路徑是相對的還是絕對的

[英]determine if a path is relative or absolute

是否有簡單的正則表達式來確定路徑是相對路徑還是散列?

我要匹配這些:

../index.php  
js/funct.js  
./home/
php/file.php?url=http://www.google.com
index.html#about=http://www.google.com

但不是這些:

http://www.google.com
http://google.com
/index.php
/
//google.com
#div4

這是我到目前為止的內容:

/^[^#\/]|\/\//.test(url)

但這不起作用。 有什么辦法可以使它正常工作嗎?

順便說一句,我意識到//google.com在技​​術上是相對的,但是我仍然不想匹配這種情況

我需要它來告訴我是否需要處理pushState之后的鏈接。 考慮一下,如果我從/開始,然后將pushState d轉到/page1/則具有href為'index2.html'的鏈接應該轉到/index2.html但現在將轉到/page1/index2.html

因此,我需要檢查那些相對路徑類型。

不要使用諸如regexp等低級的東西。這些東西已經被很多其他人解決了。 尤其是邊緣情況。

看一下URI.js ,它應該可以完成工作: http : //medialize.github.io/URI.js/docs.html#is

var uri = new URI("/example.org/");
uri.is("relative") === true;

它不應以斜杠或哈希開頭,並且如果前面沒有問號或哈希,則不應包含雙斜杠? 我不會用一個正則表達式來測試,匹配“沒有雙斜杠”會非常復雜。

function test(s) {
    return s.charAt(0) != "#"
      && s.charAt(0) != "/"
      && ( s.indexOf("//") == -1 
        || s.indexOf("//") > s.indexOf("#")
        || s.indexOf("//") > s.indexOf("?")
    );
}

會更容易,更清晰和恕我直言。

所提及的解決方案均未解決駭客輸入/\\/example.com/\\\\/example.comredirect_url駭客。 這是我想出的方法,以確定我們的重定向URL是否是相對的:

var isRelative = !redirectUrl.match(/(\:|\/\\*\/)/);  // Don't allow "//" (with optional "\"'s) or ":"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM