JS:如何去除“垃圾不可见字符”?

4

有些用户正在使用一些字符来绕过正则表达式过滤器进行洪水攻击。 当我将这些字符粘贴到UTF8编辑器中时,它们看起来相同(除了洪水版本不能完全选择:似乎插入了一些不可见字符)

enter image description here

当您切换到ANSI编码时,您可以清楚地看到这两个单词的区别 liebehomo lâ€iâ€ebâ€ehâ€oâ€mo

当我将这个垃圾单词粘贴到开发者工具中时,我得到

enter image description here

s.length给出的是14而不是9!

enter image description here

所以我的问题是:如何过滤包含奇怪字符的垃圾词?

我已经有一段时间没有碰这个了,但你尝试过分割字符串吗?然后通过循环测试每个字符? - EasyBB
如果有人遇到相同的问题,请注意以下内容:str.replace(/\p{C}/gu, '');。请注意,此处需要使用 u 标志才能正常工作。不过我不确定这是否适用于所有不可见字符(有点难以测试)。 - paddotk
1个回答

0

可能只需要先替换任何不可打印字符:

string = string.replace(/[^ -~]+/g, "");

document.getElementById('demo').addEventListener('input', function(e) {
    e.target.innerHTML = e.target.innerHTML.replace(/[^ -~]+/g, "");
    console.log(e.target.innerHTML);
});
<textarea id="demo"></textarea>


这并不是检查可打印字符,而是仅检查ASCII字符。 - Bergi
请解释一下那个正则表达式好吗? - yarek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接