最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
怎样使用正则表达式实现对原始文件名中非法字符(如*?:"|)的实时校验
时间:2026-06-06 10:07:51 编辑:袖梨 来源:一聚教程网
<p>正则表达式是校验文件名非法字符最直接有效的方式,需精准匹配Windows禁止的9个字符( / : ? " |)及末尾空白符,推荐模式为/[[/:?"|]|s+$/,前后端均须校验。</p>
|)的实时校验">
正则表达式是校验文件名非法字符最直接有效的方式,关键在于精准匹配 Windows 和部分文件系统禁止的字符集,并支持实时反馈(如输入时高亮、拦截或自动清理)。
明确哪些字符属于“非法”
Windows 文件系统禁止在文件名中使用以下 9 个字符: / : * ? " |(注意:斜杠 / 和反斜杠 均不可用, 和 <code>> 虽在资源管理器中不常输入,但同样被系统拒绝)。空格、点(.)、下划线、连字符等是合法的;开头或结尾的空格、点、空字符(u0000)虽不报错但可能被系统自动修剪,建议一并过滤。
核心正则模式及说明
推荐使用以下正则表达式进行校验:
/[/:*?"|]|s+$/-
[/:*?"|]:字符类,精确匹配任意一个非法符号(注意和/需转义) -
s+$:匹配末尾一个或多个空白字符(含空格、制表符等),防止生成“xxx.txt ”这类易被截断的名称 - 若还需禁止开头空白或连续空格,可扩展为
^s+|[/:*?"|]|s+$
实时校验的典型实现方式
以 Web 前端为例,在用户输入文件名时即时响应:
- 监听
input或keyup事件,获取当前输入值 - 用
regex.test(filename)判断是否含非法字符 - 若命中,立即标红输入框、显示提示(如“文件名不能包含 : * ? 等字符”),并可选禁用提交按钮
- 进阶做法:用
filename.replace(/[/:*?"|]/g, '_')实时替换非法字符为下划线,提升体验
服务端必须二次校验
前端校验可被绕过,服务端收到文件名后必须再次执行相同正则判断。例如 Node.js 中:
if (/[u0000-u001F/:*?"|]|s+$/u.test(filename)) { throw new Error('非法文件名'); }补充说明:u0000-u001F 覆盖 ASCII 控制字符(如 u0000 空字符),u 标志确保正确处理 Unicode。
相关文章
- 伊莫星骑士支线任务如何完成 06-16
- 逆战未来深渊狂潮怎么玩 06-16
- 银河灰暗角落结局彩蛋触发方法分享 06-16
- 异能重组护盾流玩法攻略介绍说明 06-16
- 别拽了烤串师傅气味炸弹成就解锁攻略 06-16
- 银河灰暗角落暴击流玩法构筑分享 06-16