Как мога да проверя 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 пътищата. Допълнително проучване ме доведе до тази тема на channel9:
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{}~
и 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) (име на обект)
$/
- край на низ
Няколко бележки:
\\
не е никога разрешен.За изпълнение на JavaScript библиотека, включително тестове и примери, вижте тук.
Ако под „валидиране“ имате предвид „уверете се, че е в правилния формат“, разбира се. UNC пътищата са достатъчно редовни, за да бъдат определени от регулярен израз.
Ако имате предвид това и тестване дали пътят препраща към валидна директория или файл, това ще зависи от възможностите на хост средата, в която се изпълнява JavaScript. Не бихте могли лесно да го направите от повечето браузъри, например, но можете с NodeJS или Rhino или Хост на скриптове на Windows.