SiZapPaaiGwat / inhuman-cpc.github.io

我的博客
431 stars 94 forks source link

空格 #107

Open SiZapPaaiGwat opened 8 years ago

SiZapPaaiGwat commented 8 years ago

Unicode定义的空格符号如下:

[\u0020\u00A0\u1680\u180E\u2002-\u200D\u202F\u205F\u2060\u3000\uFEFF]

以下几种空格可以重点留意:

其中\u2060为Unicode 3.2新增。

在移除字符串首尾空白时,我们看看TJ的trim:

function trim(str){
  return str.replace(/^\s*|\s*$/g, '');
}

别看这个库如此简单,但是每天的下载量达到1W+。先不说其它方面的BUG,就正则来说问题就不少。 \s匹配一个空白字符,等价于:

[\f\n\r\t\v\u00A0\u0020\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]

可以看出很多第三方库在移除首尾空白时都没有考虑周全。 下面我们看看浏览器内置的trim又是怎样的?

示例代码:

var s = '\u0020\u00A0\u1680\u180E\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u200B\u200C\u200D\u202F\u205F\u2060\u3000\uFEFF'
for (var i = 0; i < s.length; i += 1) {
  if (s[i].trim().length > 0) {
    console.log('\\u' + s.charCodeAt(i).toString(16))
  }
}

输出结果如下:

结论很明朗:浏览器内置的trim也并非100%准确,所以我推荐在严格场景下面使用自定义的trim函数。

查看在线示例

参考链接