Абсолютный путь UNIX начинается с '/', тогда как Windows начинается с алфавита 'C:' или '\'. Имеет ли node.js стандартную мультиплатформенную функцию, чтобы проверить, является ли путь абсолютным или относительным?Как проверить, является ли путь абсолютным или относительным
ответ
Это немного поздно но для других пользователей по той же проблеме:
с версии узла 0.12.0 вы можете использовать функцию path.isAbsolute(path)
из модуля path.
т.е.
var path = require('path');
if(path.isAbsolute(myPath)) {
//...
}
Вы можете использовать
path.resolve(yourPath)===yourPath
Если ваш путь не нормируется, используйте
path.resolve(yourPath) == path.normalize(yourPath)
Там также функция isAbsolute в источнике, даже если я не найти его в документации, и это, кажется, не будут доступны: https://github.com/joyent/node/blob/master/ lib/path.js # L206 –
Да, я не знаю, почему этого не происходит в документе, но пока думаю, что я буду использовать ваш ответ для обеспечения безопасности. –
@ManuelDiIorio [related] (https://github.com/joyent/node/issues/6705) –
Я понятия не имею о 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) === '/';
};
Как прокомментировал ответ dystroy, в предлагаемые решения не работают, если абсолютный путь уже не нормализованы (например, путь: ///a//..//b//./
).
Правильное решение:
path.resolve(yourPath) === path.normalize(yourPath)
Как Marc Diethelm предлагает в комментариях, это есть еще некоторые проблемы, так как path.resolve
удаляет слешей пока path.normalize
нет.
Я не знаю, как они функционируют так же ведут себя (как вы можете прочитать в комментариях), в любом случае следующий фрагмент кода, кажется, работает хорошо, по крайней мере в среде Linux:
path.resolve(yourPath) === path.normalize(yourPath).replace(RegExp(path.sep+'$'), '');
Однако, поскольку 'normalize' сохраняет конечные косые черты, ваше решение должно быть расширено.' path.resolve (_yourPath) == = path.normalize (_yourPath) .replace (/ [\/| \\] $ /, '') ', будет работать надежно. –
@MarcDiethelm: вы очень правы, я никогда не замечал. ответ с учетом вашего предложения! В любом случае ваше решение все еще не работает «отлично работает, например, с ошибкой«/\\ ». Есть ли какая-либо конкретная причина для удаления задней обратной косой черты? Поддерживает ли Windows пути или что еще? – peoro
. Проверка подлинности обратной косой черты необходима для Windows. re: он не работает с '/ \\'. Я не понимаю, вы можете сделать это? Это должен быть путь, который вы проверяете ?! –
Это немного запутанным, но самый надежный способ я нашел, используя только (узел предварительной 0.12.0) модуль пути
function isAbsolute(p) {
return path.normalize(p + '/') === path.normalize(path.resolve(p) + '/');
}
Это должно быть отметил, что path.isAbsolute существует с узла 0.12.0 и далее.
Кажется довольно твердым –
isRelative(url){
return (/^(\.){1,2}(\/){1,2}$/.test(url.slice(0,3)) ||
/(\/){1,2}(\.){1,2}(\/){1,2}/.test(url));
}
Это позволяет легко проверить, является ли путь относительным, несмотря на отсутствие API-интерфейса узла пути.
(/^(\.|~){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));
}
Пожалуйста, объясните, что вы сделали. –
- 1. определить, является ли путь относительным или абсолютным
- 2. Как проверить, является ли путь относительным или абсолютным в java
- 3. Tcl: Проверьте, является ли путь относительным или абсолютным
- 4. Проверить, если Shell Script $ 1 является абсолютным или относительным путем
- 5. Как проверить, что INTERVAL является относительным или абсолютным в PostgreSQL
- 6. Как проверить, является ли путь абсолютным путем или относительным путем кросс-платформенным способом с помощью Python?
- 7. Определить, если путь является относительным или абсолютным в Javascript
- 8. Как определить, является ли прыжок абсолютным или относительным?
- 9. Как узнать, является ли URL относительным или абсолютным в Jekyll?
- 10. Как узнать, является ли MotionEvent относительным или абсолютным?
- 11. Как abspath определяет, является ли путь относительным?
- 12. Определите, является ли Url абсолютным или относительным из vb
- 13. Как определить, является ли путь к файлу абсолютным или относительным в ColdFusion
- 14. Как определить, является ли путь относительным или абсолютным с VB Scripting Host
- 15. проверить, если путь является абсолютным или не использовать регулярное выражение
- 16. Проверить, существуют ли файлы с абсолютным и относительным путем
- 17. Учитывая путь, как определить, является ли его абсолютным/относительным в Ruby?
- 18. Проблема с абсолютным/относительным позиционированием
- 19. Java: как узнать, является ли путь абсолютным, независимо от ОС.
- 20. Проблемы с относительным/абсолютным путем
- 21. Как проверить, является ли значение href относительным значением с селеном
- 22. определить, является ли строка абсолютным URL-адресом или относительным URL-адресом в java
- 23. Как проверить, является ли путь символической ссылкой?
- 24. Путаница по относительным и абсолютным путям
- 25. Как проверить, является ли данный путь файлом или каталогом?
- 26. Как проверить, является ли путь папкой или файлом с svnlook?
- 27. Как проверить, является ли число абсолютным целым с помощью PHP?
- 28. Как создать панель навигации, которая является абсолютным и относительным нижним колонтитулом с абсолютным телом
- 29. Как определить, является ли данный путь абсолютным/относительным и преобразовать его в абсолютное значение для манипуляции с файлами?
- 30. Загрузка файла - selenium - Путь не является абсолютным
Обратите внимание, что isAbsolute, кажется, возвращает true для любого пути, начинающегося с /, будь то в Windows или Mac (не уверен о * nix) –