原生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]
基本上是可以去掉空格的了。
想简单的直接用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]
基本上是可以去掉空格的了。
相关文章推荐
- js去除字符串前后空格的方法
- js字符串去除前后空格(多个关键词转换为数组)
- 自定义js去除字符串空格
- js---在前端开发中,如何通过正则表达式去除字符串string首尾的空格,JavaScript正则去除首尾空格
- JS去除字符串中空格的方法
- JS中去除字符串两边的空格(trim(str))
- js去除字符串中的所有空格(包括前后,中间存在的所有空格)
- 处理字符串的一些js/jq方法(去除HTML,去除空格,计算真实长度,截取中英文字符)
- JS去除字符串两端空格的简单实例
- JS去除字符串左右两端的空格
- js去除字符串前后空格
- JS去除字符串的空格增强版(可以去除中间的空格)
- Javascript中去除两边的空格和JS中判断字符串中是否包含某字符
- js去除字符串空格,实现trim()方法
- JS 去除字符串中的空格
- js去除字符串左右空格
- JS一行代码去除字符串首尾空格
- js用正则表达式去除字符串左右空格
- Js去除字符串左右两端的空格
- js中去除字符串前后空格