我接受用戶輸入(JS代碼)並實時執行(處理)它們以顯示某些輸出。從JavaScript字符串中刪除零寬度空格字符
有時代碼有那些零寬度的空間,這真的很奇怪。我不知道用戶是如何輸入的。示例 - 「($".length === 3
我需要能夠從我的代碼在JS中刪除該字符我該怎麼做呢?或者theres一些其他方式來執行該JS代碼,以便瀏覽器不佔用零?寬度空格字符考慮
我接受用戶輸入(JS代碼)並實時執行(處理)它們以顯示某些輸出。從JavaScript字符串中刪除零寬度空格字符
有時代碼有那些零寬度的空間,這真的很奇怪。我不知道用戶是如何輸入的。示例 - 「($".length === 3
我需要能夠從我的代碼在JS中刪除該字符我該怎麼做呢?或者theres一些其他方式來執行該JS代碼,以便瀏覽器不佔用零?寬度空格字符考慮
Unicode有以下零寬度字:
要在JavaScript字符串中刪除它們,你可以使用一個簡單的正則表達式:
var userInput = 'a\u200Bb\u200Cc\u200Dd\uFEFFe';
console.log(userInput.length); // 9
var result = userInput.replace(/[\u200B-\u200D\uFEFF]/g, '');
console.log(result.length); // 5
注意,有更多的符號,可能是不可見的。例如,一些ASCII’s control characters。
[@IvánCastellanos提到](https://twitter.com/ivanca/status/354252316435689472)可能考慮的其他字符:U + 200E左對右標記和U + 200F右對齊標記。正如我所說,可能有其他符號本身並不嚴格可見。 –
我們如何檢測這些值是否在DOM加載後實際存在於頁面上?謝謝! – blackhawk
'var HTMLe = document.getElementsByTagName('html')[0]; HTMLe.outerHTML = HTMLe.outerHTML.replace(/ [\ u200B- \ u200D \ uFEFF \ u200E \ u200F]/g,'');'...這就是如何 – 2017-05-16 16:20:22
[].filter.call(str, function(c) {
return c.charCodeAt(0) !== 8203;
});
過濾器的每個字符以除去焦炭8203碼(零寬度空間的unicode數)
我有一個問題,一些看不見的字符正在破壞我的JSON,導致意外的標記非法異常,這是我的網站崩潰。
下面是使用正則表達式可變我的解決方案:
var re = new RegExp("\u2028|\u2029");
var result = text.replace(re, '');
更多關於JavaScript和零米寬度的空間,你可以在這裏找到: Zero Width Spaces
或符號可能會更慢(在IE中),因爲它針對多字符匹配進行了優化。但是,有了谷歌的V8,誰知道,它的運行速度可能一樣快。 –
str.replace(/\u200B/g,'');
200B是零寬度空間8203的十六進制。用空字符串替換此刪除此
你是如何推斷有一個零寬度的字符?從單獨的長度?非BMP字符的長度爲2. –
當我走到字符串的末尾時,點擊左箭頭,在一點上,它不會向左移動,直到按左箭頭鍵兩次。這就是我的感受。 – user1437328
然後您需要分析字符,例如通過寫出數字代碼。數據可能包含組合標記,以便在向左移動時將兩個或更多個字符視爲一個單位。 –