如何使用javascript验证UNC路径?
有效的UNC路径示例如下: -
\\192.168.0.100\MuhammedRaufK\Share
\\Shared1_svr\Shared1\WGroups\Network\Orders.xls
答案 0 :(得分:2)
这是一个老问题,但我最近需要答案。关于此Stack Overflow问题(Regex to validate a network path it PHP, jQuery, JavaScript, Ruby)有一些建议,但是大多数问题都没有说明UNC路径中允许的许多变化。进一步的研究使我在channel9上找到了这个主题:
https://channel9.msdn.com/Forums/TechOff/132283-regex-UNC-share
它表明(记录良好)RegEx of
^(\\\\[^/\\\]\[":;|<>+=,?* _]+\\[^/\\\]\[":;|<>+=,?*]+)((?:\\[^\\/:*?"<>|]+)*\\?)$
似乎运作良好,至少对我的需求而言。
答案 1 :(得分:2)
使用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]+)|))|)))|)$/
分解如下:
/^\\\\
- 匹配以两个反斜杠\\\\
()
- capture(1)(主机名)
[^\\:\|\[\]\/";<>+=,?* _]+
- 匹配任何字符序列,不包括\\:\|\[\]\/";<>+=,?* _
,一次或多次
\\
- 匹配文字反斜杠\\
()
- 捕获(2)(共享名称)
[\u0020-\u0021\u0023-\u0029\u002D-\u002E\u0030-\u0039\u0040-\u005A\u005E-\u007B\u007E-\u00FF]{1,80}
- 匹配匹配!#$%'()\-\.0-9@A-Z^_`a-z{}~
和Latin-1 Unicode补充的1到80个字符的任何序列
(
- 开始捕获(3)(对象名称)
(
- 开始捕获(4)(路径名)
(?:\\[\u0020-\u0021\u0023-\u0029\u002D-\u002E\u0030-\u0039\u0040-\u005A\u005E-\u007B\u007E-\u00FF]{1,255})+?
- 捕获但不记得\\
字面值后跟一个或多个匹配!#$%'()\-\.0-9@A-Z^_`a-z{}~
和Latin-1 Unicode补丁的1到255个字符的序列,并且非贪婪地执行此操作(5)
|)
- 或者什么都不捕获(4)(路径名)
(?:
- 开始捕捉但不记得(6)
\\
- 匹配\\
字面
(
- 开始捕获(7)(文件名)
(?:[0-9a-z]{1,255}){1}
- 捕获但不记得与!#$%'()\+,\-\.0-9;=@A-Z\[\]^_`a-z{
匹配的1到255个字符的序列(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)(对象名称)
$/
- 字符串结尾
一些注意事项:
答案 2 :(得分:0)
如果通过“验证”表示“确保其格式正确”,那么肯定。 UNC路径足够常规,可由regular expression定义。
如果您的意思是和测试路径是否引用了有效的目录或文件,那将取决于运行JavaScript的主机环境的功能。例如,您无法在大多数浏览器中轻松完成此操作,但您可以使用NodeJS或Rhino或Windows Script Host。