Windows路径校验正则异常:误匹配C:\foo\C:\bar这类含多盘符的非法路径
Windows路径校验正则多盘符匹配问题修复方案
你当前正则错误匹配多盘符路径的根因是盘符/UNC路径前缀被放在了可重复匹配的分组中,允许在路径任意位置匹配盘符,所以才会识别C:\foo\C:\bar这类非法路径。
修改后的完整正则如下,完全兼容你原有校验规则,仅调整了分组结构:
^(?:(?:[a-z]:|\\\\[a-z0-9_.$●-]+\\[a-z0-9_.$●-]+)\\)?(?:\\?[^\\\/:*?"<>|\r\n]+\\?)*(?:[^\\\/:*?"<>|\r\n]+\\)*[^\\\/:*?"<>|\r\n]*$
修改逻辑说明
- 把原正则开头的盘符/UNC匹配规则从可重复的
(?:盘符|相对路径)*分组中抽离,单独作为开头可选匹配项,只允许在整个路径的开头出现0次或1次,彻底禁止路径中间出现盘符前缀 - 后续路径段完全沿用你原有规则,保留了所有非法字符校验逻辑,不会破坏你之前修复的字符未转义问题
修改后正则可以正确覆盖你原有的所有合法路径校验场景,同时会拦截包含多个盘符、中间出现冒号的非法路径,在PowerShell中使用时依旧保持不区分大小写的匹配规则即可。
内容的提问来源于stack exchange,提问作者fmotion1
相关产品推荐
相关产品推荐

