String strip() for JavaScript?

JavascriptTrimStrip

Javascript Problem Overview


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"

Javascript Solutions


Solution 1 - Javascript

Use this:

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

The trim function will now be available as a first-class function on your strings. For example:

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

EDIT: Took J-P's suggestion to combine the regex patterns into one. Also added the global modifier per Christoph's suggestion.

Took Matthew Crumley's idea about sniffing on the trim function prior to recreating it. This is done in case the version of JavaScript used on the client is more recent and therefore has its own, native trim function.

Solution 2 - Javascript

For jquery users, how about $.trim(s)

Solution 3 - Javascript

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:

Solution 4 - Javascript

Here's the function I use.

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

Solution 5 - Javascript

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.

Solution 6 - Javascript

Steven Levithan once wrote about how to implement a Faster JavaScript Trim. It’s definitely worth a look.

Solution 7 - Javascript

If you're already using jQuery, then you may want to have a look at jQuery.trim() which is already provided with jQuery.

Solution 8 - Javascript

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionrawrrrrrrrrView Question on Stackoverflow
Solution 1 - JavascriptDavid AndresView Answer on Stackoverflow
Solution 2 - Javascriptuser638373View Answer on Stackoverflow
Solution 3 - JavascriptlambshaanxyView Answer on Stackoverflow
Solution 4 - JavascriptMicView Answer on Stackoverflow
Solution 5 - JavascriptBardi HarborowView Answer on Stackoverflow
Solution 6 - JavascriptGumboView Answer on Stackoverflow
Solution 7 - JavascriptFilip DupanovićView Answer on Stackoverflow
Solution 8 - JavascriptEricView Answer on Stackoverflow