从字符串中去除前导和尾随空格的干净且高效的JavaScript实现是什么?
例如:
" dog"
"dog "
" dog "
" dog "
所有人都变成了
"dog"
答案 0 :(得分:193)
使用此:
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)想要在重新创作之前嗅探修剪功能。这样做是为了防止客户端上使用的JavaScript版本更新,因此具有自己的原生修剪功能。
答案 1 :(得分:141)
对于jquery用户,$.trim(s)
答案 2 :(得分:87)
Gumbo已经在评论中注意到了这一点,但这需要重复作为答案:在JavaScript 1.8.1中添加了trim()
方法,并得到所有现代浏览器的支持(Firefox 3.5 +,IE 9,Chrome 10) ,Safari 5.x),虽然IE 8及更早版本不支持它。用法很简单:
" foo\n\t ".trim() => "foo"
另见:
答案 3 :(得分:12)
这是我使用的功能。
function trim(s){
return ( s || '' ).replace( /^\s+|\s+$/g, '' );
}
答案 4 :(得分:11)
来自MDN的更好的polyfill,支持删除BOM和NBSP:
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
};
}
请记住,修改内置原型会带来性能损失(由于JS引擎因许多运行时优化而烦恼),而在性能危急情况下,您可能需要考虑定义{{1}的替代方案而是。话虽这么说,如果你的目标是没有原生myTrimFunction(string)
支持的旧环境,你可能会遇到更重要的性能问题。
答案 5 :(得分:8)
Steven Levithan曾写过如何实施Faster JavaScript Trim。这绝对值得一看。
答案 6 :(得分:7)
如果你已经在使用jQuery,那么你可能想看看已经提供jQuery的jQuery.trim()
。
答案 7 :(得分:6)
如果您不是编写新代码来修剪字符串,而是查看调用“strip()”的现有代码并想知道它为什么不起作用,您可能想要检查它是否尝试包含类似的内容prototypejs框架,并确保它实际上已加载 该框架为所有String对象添加了一个strip函数,但是你升级了它,你的网页仍然指的是旧的.js文件,它当然不起作用。