Windows路径验证正则错误匹配目录名前导空格问题求助
问题根因
你之前的修改只约束了中间文件夹段的首字符不能为空格,存在两处校验遗漏:
- 开头盘符/UNC路径后的首个路径段、最终的文件名段没有增加前导空格校验逻辑
- 你修改时使用的
[^\s][^xxx]+结构要求路径段至少2个字符,会误拦截单字符合法目录/文件名(比如C:\a\test.txt)
修复方案
将所有路径段(开头段、中间文件夹、结尾文件名)的匹配逻辑统一调整为[^\s\\/:*?"<>|\r\n][^\\/:*?"<>|\r\n]*,首字符排除空格和Windows路径非法字符,后续字符仅排除非法字符即可。
修复后完整正则
^(?:(?:[a-z]:|\\\\[a-z0-9_.$●-]+\\[a-z0-9_.$●-]+)\\|\\?[^\s\\\/:*?"<>|\r\n][^\\\/:*?"<>|\r\n]*\\?)(?:[^\s\\\/:*?"<>|\r\n][^\\\/:*?"<>|\r\n]*\\)*[^\s\\\/:*?"<>|\r\n][^\\\/:*?"<>|\r\n]*$
校验效果说明
- 非法路径拦截符合预期:
C:\ Leading Space\ Shouldnt Match、C:\LeadingSpace\ ShouldntMatch等所有携带前导空格路径段的路径都会匹配失败 - 合法路径兼容正常:
C:\Normal Path\SubFolder\file.txt、\\server\share\folder\file.docx、relative\path\file.txt等符合Windows规则的路径均可正常匹配 - 不会误拦截单字符目录/文件名,比如
C:\a\b.txt可正常通过校验
注意事项
使用正则时需开启不区分大小写修饰符(i),否则大写盘符(如C:\)会匹配失败;如果需要支持根目录(如C:\)的校验,可将结尾文件名段调整为可选,修改为(?:[^\s\\\/:*?"<>|\r\n][^\\\/:*?"<>|\r\n]*)?$即可。
内容的提问来源于stack exchange,提问作者fmotion1
相关产品推荐
相关产品推荐

