我正在尝试使用
chrome.downloads.download(...)
下载文件。文件名是外部给定的,所以我不知道里面的字符。如果它包含无效字符,函数download
将抛出错误Error: Invalid filename
。
JavaScript 中是否有一个正则表达式可以将文件名中的 all 无效的起始/中间/结尾 Unicode 字符替换为
_
?
或者有没有列出 Chrome 中文件名规则的文档?
有没有办法让 Chrome 替换我的文件名中的无效字符,而不是抛出错误?
Chrome 不允许使用比常见文件系统(例如 NTFS)更多的字符,并且我不确定 Chrome 对“无效字符”的确切定义。我当前的正则表达式尝试是
var regex = /^\.|\.$|[\x00-\x1f\\\/:*?"<>|\r\n\u200D]/g;
filename.replaceAll(regex, '_');
但它只涵盖了一些无效的 Unicode 字符。
我避免使用
<a>
方法下载(即使用 <a>
和 href
属性创建 download
,然后单击它),因为我想在下载文件夹中创建子目录。
我不确定 Chrome 中文件名的规则,我找到了这个开发人员文档样式指南,但一个简单的解决方案是仅接受字母数字字符、减号和句点,以及正则表达式:
var regex = /[^\w-.]/g;
如果有很多无效字符,也许删除它们比用下划线替换它们更方便:
filename.replaceAll(regex, '');