合法目录路径前缀校验正则表达式编写求助
合法目录路径前缀校验正则方案
最终可覆盖全部规则的正则表达式如下:
^\/(?:[a-zA-Z0-9_-]+(?:\/[a-zA-Z0-9_-]+)*)?$
匹配逻辑拆解
- 同时兼容两类合法场景:
- 特殊场景:仅单个正斜杠
/直接匹配通过 - 常规路径场景:强制以
/开头,后续由合法目录名拼接组成
- 特殊场景:仅单个正斜杠
- 合法目录名严格限定字符范围为
[a-zA-Z0-9_-],仅允许大小写英文字母、数字、下划线、连字符,从字符集层面直接拦截.等其他特殊字符,自动过滤带后缀的文件路径 - 对路径分隔符
/做强结构约束:每一个/后必须紧跟非空合法目录名,从根源杜绝连续斜杠(对应空目录名)的问题 - 正则末尾固定匹配合法目录名,强制路径不能以
/结尾 - 起始位置固定匹配
/,直接拦截未以斜杠开头的相对路径
匹配效果验证
合法路径(全部匹配通过)
//abc/def/hello_123/world-456- 单级目录场景如
/test、/a-b_c123也可正常匹配通过
非法路径(全部拦截)
/abc/def/(结尾带斜杠)/abc//def(存在连续斜杠/空目录名)//(多连续斜杠)abc/def(未以斜杠开头)/abc/def/file.txt(携带带后缀的文件名)- 含其他特殊字符的路径如
/ab@c、/ab c也会被正常拦截
原正则缺陷说明
你之前编写的^(\/+(?!\/))[A-Za-z0-9\/\-_]+$存在三个核心问题:
- 将
/直接放入通用允许字符集,没有约束/的出现位置和前后关联规则,既无法识别连续斜杠,也无法拦截结尾斜杠 - 开头部分写了
\/+,允许开头出现多个连续斜杠,不符合规则要求 - 没有排除
.字符,会错误匹配带后缀的文件路径
内容的提问来源于stack exchange,提问作者Nalyd
相关产品推荐
相关产品推荐

