203

什么是从字符串中去除前导和尾随空格的干净高效的 JavaScript 实现?

例如:

" dog"

"dog "

" dog "

" dog "

都变成了

"dog"

4

8 回答 8

229

用这个:

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

trim 函数现在可以作为字符串上的一等函数使用。例如:

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

编辑:接受 JP 的建议,将正则表达式模式合并为一个。还根据 Christoph 的建议添加了全局修饰符。

在重新创建它之前,采用了 Matthew Crumley 关于嗅探修剪功能的想法。这是在客户端使用的 JavaScript 版本更新的情况下完成的,因此具有自己的本机修剪功能。

于 2009-09-13T15:57:34.627 回答
150

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

于 2011-02-28T21:05:20.693 回答
114

Gumbo 已经在评论中指出了这一点,但作为答案需要重复:该trim()方法是在 JavaScript 1.8.1 中添加的,并且被所有现代浏览器(Firefox 3.5+、IE 9、Chrome 10、Safari 5.x)支持,尽管IE 8 和更早版本不支持它。用法很简单:

 "  foo\n\t  ".trim() => "foo"

也可以看看:

于 2012-01-17T01:41:51.100 回答
13

这是我使用的功能。

function trim(s){ 
  return ( s || '' ).replace( /^\s+|\s+$/g, '' ); 
}
于 2009-09-13T16:08:14.977 回答
12

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

if (!String.prototype.trim) {
  String.prototype.trim = function () {
    return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
  };
}

请记住,修改内置原型会带来性能损失(由于 JS 引擎放弃了许多运行时优化),并且在性能关键的情况下,您可能需要考虑替代定义myTrimFunction(string)。话虽如此,如果您的目标是没有原生.trim()支持的旧环境,您可能需要处理更重要的性能问题。

于 2014-10-20T10:42:38.807 回答
9

Steven Levithan曾经写过关于如何实现Faster JavaScript Trim的文章。绝对值得一看。

于 2009-09-13T17:14:19.683 回答
7

如果您已经在使用 jQuery,那么您可能想看看jQuery.trim()jQuery 已经提供了哪些。

于 2012-01-23T12:04:53.320 回答
6

如果不是编写新代码来修剪字符串,而是查看调用“strip()”的现有代码并想知道它为什么不起作用,您可能想检查它是否尝试包含类似prototypejs框架的东西,并确保它实际上正在加载。
该框架为所有 String 对象添加了一个 strip 函数,但如果你升级它并且你的网页仍然引用旧的 .js 文件,它当然不能工作。

于 2010-08-16T16:34:38.823 回答