如何使用javascript验证UNC路径?
有效UNC路径的示例包括:-
\\192.168.0.100\MuhammedRaufK\Share
\\Shared1_svr\Shared1\WGroups\Network\Orders.xls发布于 2015-08-14 21:38:05
这是一个古老的问题,但最近我需要一个答案。关于这个堆栈溢出问题(Regex to validate a network path it PHP, jQuery, JavaScript, Ruby)有一些建议,但大多数建议都没有考虑到UNC路径中允许的许多变化。进一步的研究让我在channel9上找到了这个帖子:
https://channel9.msdn.com/Forums/TechOff/132283-regex-UNC-share
它暗示了一个(有很好记录的) RegEx
^(\\\\[^/\\\]\[":;|<>+=,?* _]+\\[^/\\\]\[":;|<>+=,?*]+)((?:\\[^\\/:*?"<>|]+)*\\?)$它似乎工作得很好,至少对我来说是这样的。
发布于 2016-10-06 03:46:15
使用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) (主机名)
[^\\:\|\[\]\/";<>+=,?* _]+ -匹配任何字符序列(不包括\\:\|\[\]\/";<>+=,?* _ )一次或多次
\\ -匹配文字反斜杠\\
() - capture (2) (共享名称)
Unicode -匹配与!#$%'()\-\.0-9@A-Z^_`a-z{}~和拉丁文-1unicode附录匹配的1到80个字符的任意序列
( - begin capture (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{}~和拉丁-1Unicode补充,并且不贪婪地执行此操作(5)
|) - OR capture nothing (4) (路径名)
(?: -开始捕获但不记得(6)
\\ -匹配\\文字
( -开始捕获(7) (文件名)
(?:[0-9a-z]{1,255}){1} -捕获但不记住匹配!#$%'()\+,\-\.0-9;=@A-Z\[\]^_`a-z{ (8)的1到255个字符的序列
(?: -开始捕获但不记得(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) (流类型)
|) - OR无捕获(12)
) - end capture (10)
|) - OR不捕获任何内容(9)
) - end capture (7) (文件名)
) - end capture (6)
|) - OR capture nothing (3) (对象名称)
$/ -字符串结束
以下是一些注意事项:
\\ is permitted进行测试。有关JavaScript库实现,包括测试和示例,请参阅here。
发布于 2011-06-14 22:17:39
如果“验证”的意思是“确保它的格式正确”,那么当然可以。UNC路径足够规则,可以由regular expression定义。
如果您是认真的,并测试路径是否引用了有效的目录或文件,这将取决于运行JavaScript的主机环境的功能。例如,在大多数浏览器中都不能轻易做到这一点,但是在NodeJS、Rhino或Windows Script Host中可以做到这一点。
https://stackoverflow.com/questions/6344936
复制相似问题