我目前正在开发一个 React Native 应用程序,并正在进行一些文件名清理。我注意到某些文件上传因名称中带有重音符号的字符而失败。我开始使用标准化函数删除特殊字符,因为正则表达式本身还不够,但是 Android 似乎不支持该函数。
示例:
sanitizeFileName(fileName) {
let encodedFileName = fileName || "upload";
encodedFileName = encodedFileName.normalize('NFD');
encodedFileName = encodedFileName.replace(/[^a-zA-Z0-9]/g,'_');
return encodedFileName;
}
这是 android 抛出的错误:
类型错误:未定义不是一个函数(评估'o.normalize('NFD')'
由于某种原因,上述函数在 iOS 上按预期工作。查看 normalize 的文档它说 Node.js 支持它
我想知道也许“NFD”选项不受支持或类似的东西?
上面的函数确实有效,但是如果我删除 normalize
部分...
它还可以在 Debug模式下与规范化函数一起工作。
最佳答案
我遇到了同样的问题,它在 Android 上的 Debug模式下可以工作,但在不处于 Debug模式下时停止,这对我来说没什么意义。
我最终使用了unorm .
yarn add unorm
导入模块
import unorm from 'unorm';
然后将 encodedFileName.normalize('NFD') 替换为
unorm.nfd(encodedFileName);
在 Android 和 iOS 上运行良好。我希望它可以帮助其他人。
关于validation - React Native 支持 JavaScript 的标准化功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54602427/