您的位置:首页 > Web前端 > JavaScript

原生js去除字符串空格

2013-08-05 20:12 344 查看
项目中经常有将字符串空格去掉的时候,但问题就在IE6-IE8不支持String 的trim方法。

想简单的直接用jquery里面的$.trim(string);就可以了。

很早就想研究怎样用原生js怎样写,现在来研究下...

一开始想法是直接用replace替换掉

[code lang="js"]

//原生js替换字符串的空格

function trim(str){
return str.replace(/s/g,"");
}

[/code]

然后测试下,毫无意外在google下:

[code lang="js"]

var s = ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
trim(s); //SyntaxError: Unexpected token ILLEGAL

[/code]

字符串s用了换行符,然后就不行了。

好吧,是我太单纯太幼稚了。

然后看了下jquery1.9.1里面的用法。原来:

(先把jquery代码贴出来)

[code lang="js"]

core_version = "1.9.1",
core_trim = core_version.trim,
whitespace = "[x20trnf]",
rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^])(?:.)*)" + whitespace + "+$", "g" ),

trim: core_trim && !core_trim.call("uFEFFxA0") ?
function( text ) {
return text == null ?
"" :
core_trim.call( text );
} :

// Otherwise use our own trimming functionality
function( text ) {
return text == null ?
"" :
( text + "" ).replace( rtrim, "" );
},

[/code]

先普及下常规知识。

xnn 由十六进制数nn指定的拉丁字符,如,x0A等价于n;

uxxxx 由十六进制数xxxx指定的Unicode字符,例如u0009等价于t;

所以上面:

x20 化为十六进制数为 0010 0000;

度娘下ASCII码表,





其实是ASCII里的空格。

t 制表符;

r 回车;

n 换行;

f 换页;

uFEFF 是Unicode字符集里的空格;

xA0 是ASCII扩展集的空格;

然后jquery的这段代码就差不多可以明白了。

刚开始的

[code lang="js"]</pre>
var s = ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
trim(s); //SyntaxError: Unexpected token ILLEGAL

[/code]

其实不是正则问题,是字符串定义问题。

这样定义的字符串是错误的。

之前自己写的那个也不算全部错误。但是只能去掉Unicode的空白符。但遇上ASCII扩展集的就不行了。(后来查了下资料,关于Unicode和ASCII的关系,ascii可以看做unicode的一个子集吧)

例如:

[code lang="js"]

var s = '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ss xA0 sss '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
trim(s); // "ss sss"

[/code]

明显空格是没有去掉的。

而标准ascii码情况下退格符之类的是可以去掉的

[code lang="js"]</pre>
var s = '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' x09 ss x0A ss x0B ss x0C ss x0D x20'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
trim(s); //"ssssssss"

[/code]

修改原函数如下

[code lang="js"]</pre>
function trim(str){
return str.replace(/s|xA0/g,"");
}

[/code]

基本上是可以去掉空格的了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: