Как я могу проверить путь UNC с помощью javascript?
Примеры допустимого пути UNC: -
\\192.168.0.100\MuhammedRaufK\Share
\\Shared1_svr\Shared1\WGroups\Network\Orders.xls
Как я могу проверить путь UNC с помощью javascript?
Примеры допустимого пути UNC: -
\\192.168.0.100\MuhammedRaufK\Share
\\Shared1_svr\Shared1\WGroups\Network\Orders.xls
Это старый вопрос, но мне нужен был ответ на него недавно. Есть несколько предложений по этому вопросу о переполнении стека (Regex для проверки сетевого пути в PHP, jQuery, JavaScript, Ruby), но большинство из них не учитывают многие из допустимых вариантов путей UNC. Дальнейшие исследования привели меня к этой теме на канале 9:
https://channel9.msdn.com/Forums/TechOff/132283-regex-UNC-share
Он предлагает (хорошо задокументированный) RegEx из
^(\\\\[^/\\\]\[":;|<>+=,?* _]+\\[^/\\\]\[":;|<>+=,?*]+)((?:\\[^\\/:*?"<>|]+)*\\?)$
который, кажется, работает хорошо, по крайней мере, для моих нужд.
Используя MSDN в качестве ссылки, здесь регулярное выражение для захвата различных частей UNC-путь:
/^\\\\([^\\:\|\[\]\/";<>+=,?* _]+)\\([\u0020-\u0021\u0023-\u0029\u002D-\u002E\u0030-\u0039\u0040-\u005A\u005E-\u007B\u007E-\u00FF]{1,80})(((?:\\[\u0020-\u0021\u0023-\u0029\u002D-\u002E\u0030-\u0039\u0040-\u005A\u005E-\u007B\u007E-\u00FF]{1,255})+?|)(?:\\((?:[\u0020-\u0021\u0023-\u0029\u002B-\u002E\u0030-\u0039\u003B\u003D\u0040-\u005B\u005D-\u007B]{1,255}){1}(?:\:(?=[\u0001-\u002E\u0030-\u0039\u003B-\u005B\u005D-\u00FF]|\:)(?:([\u0001-\u002E\u0030-\u0039\u003B-\u005B\u005D-\u00FF]+(?!\:)|[\u0001-\u002E\u0030-\u0039\u003B-\u005B\u005D-\u00FF]*)(?:\:([\u0001-\u002E\u0030-\u0039\u003B-\u005B\u005D-\u00FF]+)|))|)))|)$/
который разбит следующим образом:
/^\\\\
- соответствует строке, которая начинается с двух обратных косых черт \\\\
()
- захват (1) (имя хоста)
[^\\:\|\[\]\/";<>+=,?* _]+
- соответствует любой последовательности символов, кроме \\:\|\[\]\/";<>+=,?* _
, один или несколько раз
\\
- соответствует буквальной обратной косой черте \\
()
- захватить (2) (имя акции)
[\u0020-\u0021\u0023-\u0029\u002D-\u002E\u0030-\u0039\u0040-\u005A\u005E-\u007B\u007E-\u00FF]{1,80}
- соответствует любой последовательности от 1 до 80 символов, соответствующей !#$%'()\-\.0-9@A-Z^_`a-z{}~
и дополнению Latin-1 Unicode
(
- начать захват (3) (имя объекта)
(
- начать захват (4) (путь)
(?:\\[\u0020-\u0021\u0023-\u0029\u002D-\u002E\u0030-\u0039\u0040-\u005A\u005E-\u007B\u007E-\u00FF]{1,255})+?
- захватывать, но не запоминать литерал \\
, за которым следует одна или несколько последовательностей от 1 до 255 символов, соответствующих !#$%'()\-\.0-9@A-Z^_`a-z{}~
и дополнению Unicode Latin-1, и делать это не жадно (5)
|)
- ИЛИ ничего не захватывать (4) (путь)
(?:
- начать захват но не помнить (6)
\\
— соответствует литералу \\
(
- начать захват (7) (имя файла)
(?:[0-9a-z]{1,255}){1}
- захватить, но не запомнить последовательность от 1 до 255 символов, совпадающую с !#$%'()\+,\-\.0-9;=@A-Z\[\]^_`a-z{
(8)
(?:
- начать захват но не помнить (9)
\:(?=[\u0001-\u002E\u0030-\u0039\u003B-\u005B\u005D-\u00FF]|\:)
– соответствует литералу :
, только если за ним следует \u0001-\u002E\u0030-\u0039\u003B-\u005B\u005D-\u00FF
ИЛИ литерал :
(?:
- начать захват но не помнить (10)
([\u0001-\u002E\u0030-\u0039\u003B-\u005B\u005D-\u00FF]+(?!\:)|[\u0001-\u002E\u0030-\u0039\u003B-\u005B\u005D-\u00FF]*)
— захватить последовательность из одного или нескольких символов, за которой не следует литерал :
; в противном случае захватить последовательность из 0 или более символов (11) (имя потока)
(?:
- начать захват но не помнить (12)
\:
- соответствует буквальному :
([\u0001-\u002E\u0030-\u0039\u003B-\u005B\u005D-\u00FF]+)
- захватить последовательность из одного или нескольких символов (13) (тип потока)
|)
- ИЛИ ничего не захватывать (12)
)
- концевой захват (10)
|)
- ИЛИ ничего не захватывать (9)
)
- конец захвата (7) (имя файла)
)
- концевой захват (6)
|)
- ИЛИ ничего не захватывать (3) (имя объекта)
$/
- конец строки
Несколько заметок:
\\
никогда не допускается.Реализацию библиотеки JavaScript, включая тесты и примеры, см. в разделе здесь.
Если под «проверкой» вы подразумеваете «убедитесь, что это в правильном формате», конечно. Пути UNC достаточно регулярны, чтобы их можно было определить с помощью регулярного выражения.
Если вы имеете в виду, что и проверка того, ссылается ли путь на действительный каталог или файл, это будет зависеть от возможностей хост-среды, в которой выполняется JavaScript. Например, вы не можете легко сделать это из большинства браузеров, но можете с помощью NodeJS или Rhino или Узел сценариев Windows.