What's a clean and efficient JavaScript implementation to strip leading and trailing spaces from a string?
For example:
" dog"
"dog "
" dog "
" dog "
all get turned into
"dog"
This question is related to
javascript
trim
strip
Here's the function I use.
function trim(s){
return ( s || '' ).replace( /^\s+|\s+$/g, '' );
}
Gumbo already noted this in a comment, but this bears repeating as an answer: the trim()
method was added in JavaScript 1.8.1 and is supported by all modern browsers (Firefox 3.5+, IE 9, Chrome 10, Safari 5.x), although IE 8 and older do not support it. Usage is simple:
" foo\n\t ".trim() => "foo"
See also:
If, rather than writing new code to trim a string, you're looking at existing code that calls "strip()" and wondering why it isn't working, you might want to check whether it attempts to include something like the prototypejs framework, and make sure it's actually getting loaded.
That framework adds a strip function to all String objects, but if e.g. you upgraded it and your web pages are still referring to the old .js file it'll of course not work.
Steven Levithan once wrote about how to implement a Faster JavaScript Trim. It’s definitely worth a look.
For jquery users, how about $.trim(s)
A better polyfill from the MDN that supports removal of BOM and NBSP:
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
};
}
Bear in mind that modifying built-in prototypes comes with a performance hit (due to the JS engine bailing on a number of runtime optimizations), and in performance critical situations you may need to consider the alternative of defining myTrimFunction(string)
instead. That being said, if you are targeting an older environment without native .trim()
support, you are likely to have more important performance issues to deal with.
If you're already using jQuery, then you may want to have a look at jQuery.trim()
which is already provided with jQuery.
Source: Stackoverflow.com