You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React文件名验证正则在Mac OS X失效,疑与编码相关?

解决跨系统波兰语文件名正则匹配问题

问题根源

Mac OS X默认采用Unicode NFD(规范分解)存储文件名,而Windows用的是NFC(规范合成)。比如字符ż,在Windows里是单个预合成Unicode字符,在Mac里会被拆成z加上独立的变音符号̇。你原来的正则只写了预合成的波兰字符,自然匹配不了Mac上的分解形式。

解决方案

直接用Unicode属性转义来匹配所有Unicode字母,不管是合成还是分解形式,一步解决跨系统问题:

修改正则表达式,添加u(Unicode模式)标志,并用\p{L}替代手动枚举的波兰字符:

const validCharsRegex = /^([\p{L}\s()+[\]-]+)(\.[A-Za-z0-9]+)?$/u;

if (!validCharsRegex.test(file.name)) {
    errorLabels.push(translate(labels.forbiddenCharacters));
}

说明

  • \p{L}是Unicode属性类,代表所有Unicode字母,包含带变音符号的波兰语字符(不管是合成还是分解形式),覆盖你需要的żźćńółęąśŻŹĆĄŚĘŁÓŃ等所有字符。
  • u标志必须加上,否则JavaScript正则无法识别Unicode属性转义。
  • React项目只要配置了支持ES2018+的Babel(现在大部分项目默认都支持),就能正常使用这个写法。

内容的提问来源于stack exchange,提问作者Matexon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 18:13:22