原生js去除字符串空格

项目中经常有将字符串空格去掉的时候,但问题就在IE6-IE8不支持String 的trim方法。

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

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

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

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

function trim(str){
	return str.replace(/\s/g,"");	
}
然后测试下,毫无意外在google下:
var s = '                 ';
trim(s);    //结果:""
洋洋得意了一会,在测试下,傻眼了:
var s = '	
	';
trim(s);  //SyntaxError: Unexpected token ILLEGAL
字符串s用了换行符,然后就不行了。

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

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

(先把jquery代码贴出来)

core_version = "1.9.1",
core_trim = core_version.trim,
whitespace = "[\\x20\\t\\r\\n\\f]",
rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),

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

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

先普及下常规知识。

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

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

所以上面:

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

    度娘下ASCII码表,


    其实是ASCII里的空格。

    \t 制表符;

    \r 回车;

    \n 换行;

    \f 换页;

    \uFEFF 是Unicode字符集里的空格;

    \xA0 是ASCII扩展集空格;

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

刚开始的

var s = '	
	';
trim(s);  //SyntaxError: Unexpected token ILLEGAL
其实不是正则问题,是字符串定义问题。

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

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

例如:

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

明显空格是没有去掉的。

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

var s = '  \x09 ss \x0A  ss  \x0B ss  \x0C ss  \x0D \x20';
trim(s); //"ssssssss"

修改原函数如下

function trim(str){
	return str.replace(/\s|\xA0/g,"");	
}
基本上是可以去掉空格的了。


你可能感兴趣的:(js,trim)