输出相同但字符长度不同

时间:2017-06-15 22:48:01

标签: javascript node.js casperjs

我有这个脚本:

    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
'#5​3 '
'#53 '

这种差异的原因是什么?如何以相同的格式转换此字符串?

enter image description here

由于这种差异,我的测试用例失败但我看到的字符串看起来相同:

test.assertEquals(last_build_no, plain_build_no, "Last Build page has expected title");

1 个答案:

答案 0 :(得分:1)

该字符串包含"零宽度空间"。如果您记录字符代码,则可以看到它:

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零宽度空间
  • U + 200C零宽度非连接器Unicode代码点
  • U + 200D零宽度连接器Unicode代码点
  • U + FEFF零宽度不间断空格Unicode代码点

您可以使用简单的正则表达式删除它:

var last_build_no = '#5​3 '.replace(/[\u200B-\u200D\uFEFF]/g, '');
console.log(last_build_no.length);  // Output: 4

有关详细信息,请参阅this SO answer