javascript - 正则表达式的行为因客户端而异

标签 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 打开前端(以 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/

相关文章:

c# - 如何通过 Javascript 或 Jquery 调用代码隐藏中的方法

javascript - onHashChange 在 Safari 中有效吗?

mysql - 如何将 sql join 查询转换为sequelizejs 查询

node.js - 流式 API - 如何将数据从 Node JS 连接(长时间运行的 HTTP GET 调用)发送到前端(React 应用程序)

regex - 正则表达式匹配时出现未初始化的 eq 警告

python - Django 引荐来源问题

javascript - ASP.NET,检查 JavaScript 是否被禁用?

javascript - 在 nodejs 中保持 SSH 连接

c# - 仅显示字符串中的特定消息

javascript - chrome.storage.sync.set 不保存值