正则表达式因客户端而异

时间:2018-04-17 13:55:42

标签: javascript node.js regex

我在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中执行相同操作时,无论使用何种浏览器,都会删除非字母数字并且不会被替换。

所以,我想知道服务器上的这个正则表达式如何依赖于客户端环境。 因为在所有情况下,它都收到相同的文件名。但它的行为会有所不同,具体取决于客户提出的请求。

1 个答案:

答案 0 :(得分:1)

我建议在你输入正则表达式之前规范化字符串。

normalize-strings/normalize.js让这一切变得简单:

var n = require('normalize');
console.log(n('Åland')) // Aland 

我希望这会有所帮助。