我已经看过有关此主题的各种帖子,但是当我执行以下操作时,我得到了一个奇怪的结果:
var dirtyString = '<>I\really|\re\ad?"the/wh\ole*:da|\y?.'
var cleanString = dirtyString.replace(/[\/:*?"<>|.]/g, "");
console.log(cleanString);
它删除了所有非法字符,但“r”字母也被删除。在控制台日志中,我收到“Ieallyeadthewholeday” 似乎“r”之前的“\”删除了“r”。 “\”不会删除它之前的其他字母。我错过了什么吗?
最佳答案
如果您尝试 console.log(dirtyString)
,您还会发现您的“r”也“缺失”。
这是因为“\r”实际上是回车符的转义序列(代码 13)。你的replace()对此没有任何作用。它仍然存在,只是没有显示。尝试使用 String.charAt()
和 String.charCodeAt()
,您会看到该 Angular 色仍然存在。
顺便说一句,您正在尝试删除“列入黑名单”的字符,而列入黑名单几乎从来都不是正确的方法。正如您在自己的情况下所看到的,您忘记将“\r”字符(以及许多其他字符)列入黑名单。白名单更安全。例如,您可能决定只接受拉丁字母和数字,然后删除所有未列入白名单的内容: var cleanString = dirtyString.replace(/[^a-z0-9]/gi, "");
.
关于javascript - 从文件名javascript中删除非法字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27412612/