JavaScript trim
Strips whitespace from the beginning and end of a string
1 2 3 4 56 7 8 9 1011 12 13 14 1516 17 18 19 2021 22 23 24 2526 27 28 29 3031 32 33 34 3536 37 38 39 4041 42 43 44 4546 47 48 49 50 | function trim (str, charlist) { // Strips whitespace from the beginning and end of a string // // version: 1008.1718 // discuss at: http://phpjs.org/functions/trim // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + improved by: mdsjack (http://www.mdsjack.bo.it) // + improved by: Alexander Ermolaev (http://snippets.dzone.com/user/AlexanderErmolaev) // + input by: Erkekjetter // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + input by: DxGx // + improved by: Steven Levithan (http://blog.stevenlevithan.com) // + tweaked by: Jack // + bugfixed by: Onno Marsman // * example 1: trim(' Kevin van Zonneveld '); // * returns 1: 'Kevin van Zonneveld' // * example 2: trim('Hello World', 'Hdle'); // * returns 2: 'o Wor' // * example 3: trim(16, 1); // * returns 3: 6 var whitespace, l = 0, i = 0; str += ''; if (!charlist) { // default list whitespace = " \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000"; } else { // preg_quote custom list charlist += ''; whitespace = charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '$1'); } l = str.length; for (i = 0; i < l; i++) { if (whitespace.indexOf(str.charAt(i)) === -1) { str = str.substring(i); break; } } l = str.length; for (i = l - 1; i >= 0; i--) { if (whitespace.indexOf(str.charAt(i)) === -1) { str = str.substring(0, i + 1); break; } } return whitespace.indexOf(str.charAt(0)) === -1 ? str : ''; } |
Examples
» Example 1
Running
1 | trim(' Kevin van Zonneveld '); |
Should return
1 | 'Kevin van Zonneveld' |
» Example 2
Running
1 | trim('Hello World', 'Hdle'); |
Should return
1 | 'o Wor' |
Dependencies
No dependencies, you can use this function standalone.
Open syntax issues
php.js uses JsLint to help us keep our code consistent and prevent some common bugs.
Eventually we want all code to pass or at least take into consideration most fixes suggested by JsLint, following this JsLint configuration we’ve decided on.
Authors
Thanks to the following developers, you get to have trim goodness in JavaScript.
_.trim = function( a, s )
{
s = s == un ? '\s\n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000' : real( s );
return ( a + '' ).replace( new _._.RegExp( '(^[' + s + ']*)|([' + s + ']*$)', 'g' ), '' );
}
$.real = function( a )
{
return ( a + '' ).replace( /(\$|\^|\*|\(|\)|\-|\+|\||\\|\{|\[|\}|\]|\,|\.|\?|\/)/g, '\\$1' );
}
Something like trim(16,1) does not work correctly.
Fix:
Add the following lines of code to the beginning of the function:
[CODE="Javascript"]
str += '';
charlist += '';
[/CODE]
@ Jack: That's a good idea, thank you, I've implemented it and credited you accordingly.
@ Ben W: I will have to study on that, thanks for the input
@ 0x0: That's definitely something to pounder about. We did not in the first place, because one of the project goals is to keep functions as standalone as reasonably possible. This duplication seemed reasonable for a standalone trim.
Wouldn't it be better to use regex? Like one of these:
http://blog.stevenlevithan.com/archives/faster-trim-javascript
we can avoid unnecessary string length computations by changing the "for" loop from
[CODE="Javascript"]
for (var i = 0; i < str.length; i++)
[/CODE]
to
[CODE="Javascript"]
for (var i = 0, l=str.length; i < l; i++)
[/CODE]
[CODE="Javascript"]
function trim( str, charlist ) {
var whitespace;
if (!charlist) {
whitespace = ' \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000';
} else {
whitespace = charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
}
for (var i = 0, l=str.length; i < l; i++) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(i);
break;
}
}
for (i = str.length - 1; i >= 0; i--) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(0, i + 1);
break;
}
}
return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
}
[/CODE]
If you also have rtrim and ltrim, you could just do this:
[CODE="Javascript"]
function trim(str, charlist) {
return ltrim(rtrim(str, charlist), charlist);
}
[/CODE]
[CODE="Javascript"]
function trim (str) {
var whitespace = ' \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000';
for (var i = 0; i < str.length; i++) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(i);
break;
}
}
for (i = str.length - 1; i >= 0; i--) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(0, i + 1);
break;
}
}
return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
}
[/CODE]
Replace trim function by this code. Acoding to this site: it is faster: http://blog.stevenlevithan.com/archives/faster-trim-javascript


zeroneta
Jan 5th