проверка пути UNC с использованием JavaScript - PullRequest
1 голос
/ 14 июня 2011

Как я могу проверить путь UNC, используя javascript?

Примеры допустимого пути UNC: -

\\192.168.0.100\MuhammedRaufK\Share

\\Shared1_svr\Shared1\WGroups\Network\Orders.xls

Ответы [ 3 ]

2 голосов
/ 14 августа 2015

Это старый вопрос, но недавно мне нужен был ответ.Есть несколько предложений по этому вопросу переполнения стека ( Regex для проверки сетевого пути это PHP, jQuery, JavaScript, Ruby ), но большинство из них не в состоянии объяснить многие из допустимых вариаций путей UNC.Дальнейшие исследования привели меня к этой теме на канале 9:

https://channel9.msdn.com/Forums/TechOff/132283-regex-UNC-share

Он предлагает (хорошо документированный) RegEx

^(\\\\[^/\\\]\[":;|<>+=,?* _]+\\[^/\\\]\[":;|<>+=,?*]+)((?:\\[^\\/:*?"<>|]+)*\\?)$

, который, кажется, хорошо работаетпо крайней мере, для моих нужд.

2 голосов
/ 05 октября 2016

Использование 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

( - начать захват (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{}~ и дополнению Latin-1 Unicode, и делать это без жадности (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) (имя объекта)

$/ - конец строки

Несколько заметок:

  1. Регулярное выражение соответствует всей строке.
  2. И имя хоста и имя общего ресурса необходимы , чтобы это регулярное выражение совпадало.
  3. Соответствие имени хоста не строго (указано через 4 RFC: 3986 , 1035 , 1123 и 4291 ). Следовательно, некоторые ложные срабатывания могут возникнуть. Если необходимо тщательно проверить имя хоста, запишите имя хоста и проверьте его независимо от этого регулярного выражения.
  4. Трейлинг \\ равен никогда разрешен.

Для реализации библиотеки JavaScript, включая тесты и примеры, см. здесь .

0 голосов
/ 14 июня 2011

Если под «подтвердить» вы имеете в виду «убедиться, что он в правильном формате», конечно. UNC-пути достаточно регулярны, чтобы их можно было определить с помощью регулярного выражения .

Если вы имеете в виду, что и проверяют, ссылается ли путь на действительный каталог или файл, это будет зависеть от возможностей среды хоста, в которой работает JavaScript. Например, вы не могли бы легко сделать это из большинства браузеров, но вы могли бы сделать это с NodeJS или Rhino или Windows Script Host .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...