如何修改正则实现任意嵌套深度的文件夹路径校验
通用UNC路径校验正则修改方案
你原有的正则仅支持匹配两级嵌套的UNC路径,只需将单级目录匹配逻辑封装为可重复的分组,即可支持任意n级嵌套的路径校验。
最终推荐正则
^\\\\[a-z0-9_?]+(?:\\[a-z0-9_?]+)+$
如果需要兼容路径末尾带反斜杠、或者仅共享名无下级目录的场景,可使用如下版本:
^\\\\[a-z0-9_?]+(?:\\[a-z0-9_?]+)*\\?$
正则说明
^\\\\:匹配UNC路径开头固定的两个反斜杠(正则中反斜杠需要额外转义,因此写作4个反斜杠)[a-z0-9_?]+:匹配第一级共享名/主机名,你原有规则中的[a-z0-9?_?]*存在冗余写法,方括号内的?_?等价于普通的_?,同时用+替代*可以避免匹配空的目录名,符合实际路径规则(?:\\[a-z0-9_?]+)+:非捕获分组,用于匹配后续的多级嵌套目录:?:表示非捕获分组,不会额外占用分组内存,性能更优\\匹配目录之间的单个反斜杠分隔符- 末尾的
+表示该分组可以重复1次到任意次数,实现n级目录的支持,如果需要兼容没有下级目录的场景可改为*
- 末尾的
\\?(可选配置):允许路径末尾带1个或不带反斜杠
测试示例
- 可正常匹配的路径:
\\foo_bar1\foo_bar_2\\foo_bar1\foo_bar_2\foo_bar_3\foo_bar_4\foo_bar_n\\test123\a?b\c_d\efg
- 无法匹配的非法路径:
\foo\bar(开头缺少一个反斜杠,不符合UNC路径规则)\\foo(仅存在共享名,无任何下级目录,用带*的版本可匹配该场景)\\foo\bar@123(目录名包含规则外的特殊字符@)\\foo\bar\(末尾带反斜杠,用带\\?的版本可匹配该场景)
内容的提问来源于stack exchange,提问作者foobar
相关产品推荐
相关产品推荐

