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