JavaScript的String strip()函数是什么?

206

如何从字符串中去除前导和尾随空格?

例如," dog "应变为"dog"


31
这个函数通常被称为“trim”。请参见https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim。 - Gumbo
1
@Gumbo:trim 函数相对较新,可能不被所有浏览器支持。虽然不确定,但跨浏览器支持总是个问题。 - David Andres
8个回答

238

使用这个:

if(typeof(String.prototype.trim) === "undefined")
{
    String.prototype.trim = function() 
    {
        return String(this).replace(/^\s+|\s+$/g, '');
    };
}

现在,trim函数将作为字符串的一流函数而可用。例如:

" dog".trim() === "dog" //true

编辑:采纳了J-P的建议将正则表达式模式合并为一个。也根据Christoph的建议添加了全局修饰符。

采用Matthew Crumley的建议,在重新创建trim函数之前,先对其进行嗅探。这是为了防止客户端使用的JavaScript版本更高,因此已经有自己的本地trim函数。


3
请参考 http://blog.stevenlevithan.com/archives/faster-trim-javascript 获取一些性能数据。 - Christoph
2
为了与ECMA规范兼容,trim()必须将this转换为字符串类型,即您需要将this.replace(...)更改为String(this).replace(...)('' + this).replace(...);这允许将函数应用于非字符串值并使用call()apply() - Christoph
1
@David:是的,在函数内部;ECMA规范允许在非字符串对象上调用trim(),例如String.prototype.trim.apply(42)MyObj.prototype.trim = String.prototype.trim; new MyObj().trim(); - Christoph
3
请注意,/\s/不能去除 ES3 规范中定义的所有空格字符。我最近写了一篇关于浏览器如何处理 /\s/ 的文章 - http://thinkweb2.com/projects/prototype/whitespace-deviations/ - 以及如何避免这个问题。 - kangax
3
有趣的是,原始的两个正则表达式版本(replace(/^\s+/, '').replace(/\s+$/, '');)在许多浏览器中实际上略微更快,因此您不应该出于性能问题选择单个正则表达式版本。选择你认为更易读的那一个。 - bobince
显示剩余8条评论

153

对于jQuery用户,$.trim(s)怎么样?


116

15

这是我使用的函数。

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

13

来自MDN的更好的填充,支持删除BOMNBSP

if (!String.prototype.trim) {
  String.prototype.trim = function () {
    return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
  };
}
记住,修改内置原型会导致性能下降(由于JS引擎放弃了许多运行时优化),在性能关键的情况下,您可能需要考虑定义myTrimFunction(string)作为替代方法。 话虽如此,如果您的目标是没有本地.trim()支持的旧环境,则可能有更重要的性能问题需要处理。

9

7
如果您已经在使用jQuery,那么您可能需要查看已提供的jQuery.trim(),它与jQuery相关。

6
如果你不是写新代码来删除字符串,而是在查看调用“strip()”的现有代码,并且想知道为什么它不起作用,你可能需要检查一下它是否试图包含像prototypejs框架这样的东西,并确保它实际上被加载了。
这个框架会向所有的String对象添加一个strip函数,但是如果你升级了它而你的网页仍然引用旧的.js文件,那么它当然不会起作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接