Подтвердить что ты не робот

Как проверить, является ли путь абсолютным или относительным

Абсолютный путь UNIX начинается с '/', тогда как Windows начинается с алфавита 'C:' или '\'. Имеет ли node.js стандартную мультиплатформенную функцию, чтобы проверить, является ли путь абсолютным или относительным?

4b9b3361

Ответ 1

Немного поздно, но для других, которые ищут по одной и той же проблеме:

так как node версия 0.12.0 вы можете использовать функцию path.isAbsolute(path) из path.

то есть:

var path = require('path');
if(path.isAbsolute(myPath)) {
    //...
}

Ответ 2

Вы можете использовать

path.resolve(yourPath)===yourPath

Если ваш путь не нормирован, используйте

path.resolve( yourPath ) == path.normalize( yourPath )

Ответ 3

Как прокомментировал ответ dystroy, предлагаемые решения не работают, если абсолютный путь еще не нормализован (например, путь: ///a//..//b//./).

Правильное решение:

path.resolve(yourPath) === path.normalize(yourPath)

Как Марк Дихельм предлагает в комментариях, это все еще имеет некоторые проблемы, так как path.resolve удаляет конечные косые черты, а path.normalize - нет.

Я не уверен, как эти функции работают в точности (как вы можете прочитать в комментариях), в любом случае следующий фрагмент, кажется, работает нормально, по крайней мере, в средах Linux:

path.resolve(yourPath) === path.normalize(yourPath).replace( RegExp(path.sep+'$'), '' );

Ответ 4

Это немного запутанный, но самый надежный способ, который я нашел, используя только модуль пути (pre node 0.12.0)

function isAbsolute(p) {
    return path.normalize(p + '/') === path.normalize(path.resolve(p) + '/');
}

Следует отметить, что path.isAbsolute существует от node 0.12.0 и далее.

Ответ 5

Я понятия не имею о node.js, но вы можете увидеть источник path.js в github: https://github.com/joyent/node/blob/master/lib/path.js

Вы можете видеть:

// windows version
exports.isAbsolute = function(path) {
    var result = splitDeviceRe.exec(path),
    device = result[1] || '',
    isUnc = device && device.charAt(1) !== ':';
    // UNC paths are always absolute
    return !!result[2] || isUnc;
};

И:

// posix version
exports.isAbsolute = function(path) {
    return path.charAt(0) === '/';
};

Ответ 6

    isRelative(url){
        return (/^(\.){1,2}(\/){1,2}$/.test(url.slice(0,3)) ||
        /(\/){1,2}(\.){1,2}(\/){1,2}/.test(url)); 
    }

Это позволяет легко проверить, является ли путь относительным, несмотря на отсутствие API-интерфейса пути node.

(/^(\.|~){1,2}(\/){1,2}$/.test(url.slice(0,3))

эта часть проверяет, начинается ли строка пути с "./" или "../" или "~/". Если это так, возвращается Boolean true. В противном случае выполняется следующий тест.

/(\/){1,2}(\.){1,2}(\/){1,2}/.test(url)

Это просто проверяет, имеет ли строка пути "/./" или "/../". и возвращает true для любого и false для них.

Если какой-либо из двух тестов является истинным, строка пути относительна.

Для окон.

    isRelative(url){
        return (/^(\.){1,2}(\\){1,2}$/.test(url.slice(0,3)) ||
        /(\\){1,2}(\.){1,2}(\\){1,2}/.test(url)); 
    }