首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用javascript验证UNC路径

使用javascript验证UNC路径
EN

Stack Overflow用户
提问于 2011-06-14 22:15:03
回答 3查看 2.6K关注 0票数 1

如何使用javascript验证UNC路径?

有效UNC路径的示例包括:-

代码语言:javascript
复制
\\192.168.0.100\MuhammedRaufK\Share

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

回答 3

Stack Overflow用户

发布于 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

代码语言:javascript
复制
^(\\\\[^/\\\]\[":;|<>+=,?* _]+\\[^/\\\]\[":;|<>+=,?*]+)((?:\\[^\\/:*?"<>|]+)*\\?)$

它似乎工作得很好,至少对我来说是这样的。

票数 2
EN

Stack Overflow用户

发布于 2016-10-06 03:46:15

使用MSDN作为引用,这里使用正则表达式来捕获UNC路径的各个部分:

代码语言:javascript
复制
/^\\\\([^\\:\|\[\]\/";<>+=,?* _]+)\\([\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) (对象名称)

$/ -字符串结束

以下是一些注意事项:

  1. 正则表达式匹配整个RFC主机名和共享名是匹配此正则表达式所必需的。
  2. 主机名匹配不是严格的(通过4个RFC指定:C57、C58、C59和C60)。因此,可能会出现一些误报。如果需要严格验证主机名,请捕获主机名并独立于此常规expression.
  3. A结尾\\ is permitted进行测试。

有关JavaScript库实现,包括测试和示例,请参阅here

票数 2
EN

Stack Overflow用户

发布于 2011-06-14 22:17:39

如果“验证”的意思是“确保它的格式正确”,那么当然可以。UNC路径足够规则,可以由regular expression定义。

如果您是认真的,并测试路径是否引用了有效的目录或文件,这将取决于运行JavaScript的主机环境的功能。例如,在大多数浏览器中都不能轻易做到这一点,但是在NodeJSRhinoWindows Script Host中可以做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6344936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档