我接受用户输入(JS 代码)并实时执行(处理)它们以显示一些输出。
有时代码有那些零宽度的空格;这真的很奇怪。我不知道用户是如何输入的。例子:"($".length === 3
我需要能够从我的 JS 代码中删除该字符。我该怎么做?或者也许还有其他方法可以执行该JS代码,以便浏览器不考虑零宽度空格字符?
我接受用户输入(JS 代码)并实时执行(处理)它们以显示一些输出。
有时代码有那些零宽度的空格;这真的很奇怪。我不知道用户是如何输入的。例子:"($".length === 3
我需要能够从我的 JS 代码中删除该字符。我该怎么做?或者也许还有其他方法可以执行该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 的一些控制字符。
我遇到了一个问题,一些不可见的字符正在破坏我的 JSON 并导致Unexpected Token ILLEGAL异常导致我的网站崩溃。
这是我使用 RegExp 变量的解决方案:
var re = new RegExp("\u2028|\u2029");
var result = text.replace(re, '');
有关 Javascript 和零宽度空间的更多信息,您可以在此处找到: 零宽度空间
str.replace(/\u200B/g,'');
200B 是零宽度空间 8203 的十六进制。用空字符串替换它以删除它
[].filter.call( str, function( c ) {
return c.charCodeAt( 0 ) !== 8203;
} );
过滤每个字符以删除 8203 字符代码(零宽度空格 unicode 数字)。
如果您尝试在 JavaScript 中执行此操作,请尝试此 regex。
/([\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 = /([\u200B]+|[\u200C]+|[\u200D]+|[\u200E]+|[\u200F]+|[\uFEFF]+)/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="[​‌]" />
<input type="button" value="remove zero-width characters" id="submit" />
</form>
(运行上面的代码片段后,将stringToTrim
值和trimmedString
值粘贴到regex101 测试窗口中,您将看到 Unicode 字符已从trimmedString
值中消失。)