2013-07-23 68 views
1

相對或絕對是有一個很好的方法,在那裏,將檢查一個字符串是否是一個相對路徑確定路徑是否是在Javascript

例子:

路徑=「/絕對/路徑/到「;

路徑= 「相對/路徑/到」

路徑= 「http://www.absolutePathAsWellWithoutTrailingSlash.com

路徑= 「文件:///www.absolutePathAsWellWithoutTrailingSlash.com」

你可以看到,檢查只是一個開始斜槓不會做,以確定它是絕對的還是相對的。

有沒有一個好的方法,或者我應該自己寫嗎?

+1

檢查第一個字符是否是斜線? –

+1

我會檢查該方案和兩個可能會削減和冒號(我的頭頂上)。 –

+0

@ColeJohnson不會這麼做,如問題:) – momomo

回答

10

或者你可以使用正則表達式:

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

看起來不錯。可能比依靠DOM更好。 – Paulpro

+0

偉大的破壞,我在同一行......改進提示,使用測試和(?:非分組,在測試中沒有那麼重要,但它可能會加快速度:p – momomo

+1

我想這樣會更清潔一點。 – sabof

2

像這樣的東西可能工作(我沒有測試過這一點):

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

注意,如果絕對URL指向同一個域和協議作爲當前頁面,這將返回false。

+1

請注意,a.host是一個相對較新的屬性... – dandavis

0

這是我想出了:

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

支持問題的所有提到的和:

路徑=「// same/as/the/protocol.com/abc

+0

這並不能解答問題。要批評或要求作者澄清,請在其帖子下方留言。 –

+0

如何?如果是絕對的,它會返回true,如果是相對的,則返回false – momomo

+2

我得到的印象是,您沒有回答自己的問題,只是放了一些您已經有但未在答案中工作的東西,而不是在原始問題中工作(這應該是一個編輯對你的問題或評論)。如果不是這樣,我很抱歉。如果這是一個可行的解決方案,請刪除「這就是我現在所擁有的」,只是爲了避免將來的混淆。 –

相關問題