输出相同但字符长度不同
Same output but different character length
我有这个脚本:
var last_build_no = this.getTitle();
var plain_build_no = "#53 ";
console.log(last_build_no.length);
console.log(plain_build_no.length);
这是输出:
5
4
'#53 '
'#53 '
造成这种差异的原因是什么?如何将这些字符串转换为相同的格式?
由于这种差异,我的测试用例失败了,但我看到的字符串看起来相同:
test.assertEquals(last_build_no, plain_build_no, "Last Build page has expected title");
该字符串包含一个"zero width space"。如果你记录字符代码,你可以看到它:
last_build_no.split("").forEach(c => console.log(c.charCodeAt(0)));
/*
Outputs:
35
53
8203 <-- http://www.fileformat.info/info/unicode/char/200b/index.htm
51
32
*/
Unicode 具有以下零宽度字符:
- U+200B 零宽度space
- U+200C 零宽度非连接器 Unicode 代码点
- U+200D 零宽度连接符 Unicode 代码点
- U+FEFF 零宽度不间断space Unicode 代码点
您可以使用简单的正则表达式将其删除:
var last_build_no = '#53 '.replace(/[\u200B-\u200D\uFEFF]/g, '');
console.log(last_build_no.length); // Output: 4
有关详细信息,请参阅 this SO answer
我有这个脚本:
var last_build_no = this.getTitle();
var plain_build_no = "#53 ";
console.log(last_build_no.length);
console.log(plain_build_no.length);
这是输出:
5
4
'#53 '
'#53 '
造成这种差异的原因是什么?如何将这些字符串转换为相同的格式?
由于这种差异,我的测试用例失败了,但我看到的字符串看起来相同:
test.assertEquals(last_build_no, plain_build_no, "Last Build page has expected title");
该字符串包含一个"zero width space"。如果你记录字符代码,你可以看到它:
last_build_no.split("").forEach(c => console.log(c.charCodeAt(0)));
/*
Outputs:
35
53
8203 <-- http://www.fileformat.info/info/unicode/char/200b/index.htm
51
32
*/
Unicode 具有以下零宽度字符:
- U+200B 零宽度space
- U+200C 零宽度非连接器 Unicode 代码点
- U+200D 零宽度连接符 Unicode 代码点
- U+FEFF 零宽度不间断space Unicode 代码点
您可以使用简单的正则表达式将其删除:
var last_build_no = '#53 '.replace(/[\u200B-\u200D\uFEFF]/g, '');
console.log(last_build_no.length); // Output: 4
有关详细信息,请参阅 this SO answer