我在 Node.js 中有这个应用程序。用户上传 pdf,服务器需要修改客户端的文件名,使其仅包含字母数字字符以及一些其他字符(冒号和点)。
代码如下:
console.log('document.fileName:',document.fileName);
var temp = document.fileName.replace(/[^\w.:-]+/g, "");
console.log('temp:',temp);
现在,使用我的 Mac 并使用 Chrome 打开前端(以 Angular 方式),我上传名为
的文件åäö&23^¨testarkönstigatäcken
我可以在服务器上的日志中看到:
document.fileName: åäö&23^¨testarkönstigatäcken
temp: aao23testarkonstigatacken
如您所见,它将“äåö”替换为“aao”。其他非字母数字字符已被删除。
但是,如果我对 Safari 浏览器执行同样的操作,“äåö”将会被删除。日志中的结果如下:
document.fileName: åäö&23^¨testarkönstigatäcken
temp: 23testarknstigatcken
当在 Firefox 中执行相同的操作时,我得到了与 Chrome 相同的结果,但正则表达式保留了“äåö”。
当我在 Windows 中执行相同操作时,无论使用哪种浏览器,非字母数字都会被剥离并且不会被替换。
所以,我想知道服务器上的这个正则表达式怎么可能依赖于客户端环境。 因为在所有情况下,它都收到相同的文件名。但它的行为会根据客户端发出的请求而有所不同。
最佳答案
我建议在提供正则表达式之前先规范化字符串。
normalize-strings/normalize.js让这变得容易:
var n = require('normalize');
console.log(n('Åland')) // Aland
我希望这会有所帮助。
关于javascript - 正则表达式的行为因客户端而异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49880066/