簡體   English   中英

從 JavaScript 字符串中刪除零寬度空格字符

[英]Remove zero-width space characters from a JavaScript string

我獲取用戶輸入(JS 代碼)並實時執行(處理)它們以顯示一些輸出。

有時代碼有那些零寬度空格; 這真的很奇怪。 我不知道用戶是如何輸入的。 示例: "(​$".length === 3

我需要能夠從我的 JS 代碼中刪除該字符。 我該怎么做? 或者也許有其他方法來執行該 JS 代碼,以便瀏覽器不考慮零寬度空格字符?

Unicode 具有以下零寬度字符:

  • U+200B 零寬度空間
  • U+200C 零寬度非連接器 Unicode 代碼點
  • U+200D 零寬度連接器 Unicode 代碼點
  • U+FEFF 零寬度不間斷空格 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 的控制字符

我遇到了一些不可見字符破壞了我的 JSON 並導致意外令牌非法異常的問題,這使我的網站崩潰。

這是我使用 RegExp 變量的解決方案:

    var re = new RegExp("\u2028|\u2029");
    var result = text.replace(re, '');

您可以在此處找到有關 Javascript 和零寬度空間的更多信息: Zero Width Spaces

[].filter.call( str, function( c ) {
    return c.charCodeAt( 0 ) !== 8203;
} );

過濾每個字符以刪除 8203 字符代碼(零寬度空間 unicode 數字)。

str.replace(/\u200B/g,'');

200B 是零寬度空格 8203 的十六進制。用空字符串替換它以去除它

如果您嘗試在 JavaScript 中執行此操作,請嘗試使用此正則表達式

/([\u200B]+|[\u200C]+|[\u200D]+|[\u200E]+|[\u200F]+|[\uFEFF]+)/g

 submit.onclick = evt => { const stringToTrim = stringValue.value; zeroWidthTrim(stringToTrim); } /** * Given a string, when it has zero-width spaces in it, then remove them * * @param {String} stringToTrim The string to be trimmed of unicode spaces * * @return the trimmed string * * Regex for zero-width space Unicode characters. * * U+200B zero-width space. * U+200C zero-width non-joiner. * U+200D zero-width joiner. * U+200E left-to-right mark. * U+200F right-to-left mark. * U+FEFF zero-width non-breaking space. */ function zeroWidthTrim(stringToTrim) { const ZERO_WIDTH_SPACES_REGEX = /([\​]+|[\‌]+|[\‍]+|[\‎]+|[\‏]+|[\]+)/g; console.log('stringToTrim = ' + stringToTrim); const trimmedString = stringToTrim.replace(ZERO_WIDTH_SPACES_REGEX, ''); console.log('trimmedString = ' + trimmedString); return trimmedString; };
 <form runat="server"> <input name="stringValue" id="stringValue" type="text" placeholder="enter your string" value="[&#x200b;&#x200c;]" /> <input type="button" value="remove zero-width characters" id="submit" /> </form>

(運行上述代碼片段后,將stringToTrim值和trimmedString值粘貼stringToTrim regex101 測試窗口中,您將看到 Unicode 字符已從trimmedString值中消失。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM