从 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,并导致意外的令牌非法异常,导致我的网站崩溃。
这是我使用正则表达式变量的解决方案:
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中执行此操作,请尝试此正则表达式。
/(['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
值中删除。
相关文章:
- 仅当后面跟着字母表时才允许使用空格字符的验证
- 从 JavaScript 字符串中删除零宽度空格字符
- 正则表达式匹配非空格字符
- JSON 数据后出现意外的非空格字符
- JavaScript中(字符空间字符)或(空格字符空格)的表达式是什么
- /(S)1(1)+/g 匹配三个相等的非空格字符紧随其后的所有匹配项
- Javascript RegExp:如何检测空格字符
- 在预标记中显示空格字符
- 检查数组中的字符串在javascript/jquery中是否有空格字符
- JavaScript初学者:在函数中编码单独的空格字符有什么功能区别
- 在javascript和crossfilter中使用空格字符
- 获取第一个空格字符和'='性格
- 在JavaScript中,当使用Regex时,如何在不使用空格字符ORs的情况下匹配空格
- 使用jQuery将cookie值替换为空格字符
- Javascript regex:查找一个没有后跟空格字符的单词
- Regex检查重复的空格字符
- 如何检查输入是否只包含空格字符?即只有一个或多个空格,而没有其他字符
- 替换unicode空格字符
- 在regex - Javascript中,在匹配空格字符之前先匹配字母
- 我如何添加空格字符的文本在jquery追加