我在node.js中有这个应用程序。用户上传pdf,服务器需要修改客户端的文件名,只包含字母数字字符和其他字符(冒号和点)。
代码如下:
console.log('document.fileName:',document.fileName);
var temp = document.fileName.replace(/[^\w.:-]+/g, "");
console.log('temp:',temp);
现在,使用我的Mac打开前端(角度)并使用Chrome,我上传名称为
的文件åäö&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中执行相同操作时,无论使用何种浏览器,都会删除非字母数字并且不会被替换。
所以,我想知道服务器上的这个正则表达式如何依赖于客户端环境。 因为在所有情况下,它都收到相同的文件名。但它的行为会有所不同,具体取决于客户提出的请求。
答案 0 :(得分:1)
我建议在你输入正则表达式之前规范化字符串。
normalize-strings/normalize.js让这一切变得简单:
var n = require('normalize');
console.log(n('Åland')) // Aland
我希望这会有所帮助。