DekGenius.com
[ Team LiB ] Previous Section Next Section

Recipe 9.12 Trimming Whitespace

9.12.1 Problem

You want to trim the whitespace from the beginning and end of a string.

9.12.2 Solution

Write a custom trim( ) method that splits the string into an array of characters, removes the whitespace from the beginning and end, and then returns the character array as a string using join( ).

9.12.3 Discussion

Extra whitespace at the beginning and end of a string is a common enough annoyance that you should have a way of dealing with it. ActionScript does not provide a native trim( ) method, so you have to write your own.

The custom trim( ) method presented here:

  1. Splits the string into an array or characters

  2. Removes whitespace elements at the beginning of the array until it finds an element that is not a whitespace character (tab, form feed, carriage return, newline, or space)

  3. Removes whitespace elements at the end of the array

  4. Uses join( ) to form the array characters into a single string and returns that value

Here is our custom String.trim( ) function. You can add it to a String.as file for easy inclusion in other projects.

String.prototype.trim = function (  ) {

  // Split the string into an array of characters.
  var chars = this.split("");

  // Remove any whitespace elements from the beginning of the array using splice(  ).
  // Use a break statement to exit the loop when you reach a non-whitespace character
  // to prevent it from removing whitespace in the middle of the string.
  for (var i = 0; i < chars.length; i++) {
    if (chars[i] == "\r" ||
        chars[i] == "\n" ||
        chars[i] == "\f" ||
        chars[i] == "\t" ||
        chars[i] == " ") {
      chars.splice(i, 1);
      i--;
    } else {
      break;
    }
  }

  // Loop backward through the array, removing whitespace elements until a 
  // non-whitespace character is encountered. Then break out of the loop.
  for (var i = chars.length - 1; i >= 0; i--) {
    if (chars[i] == "\r" ||
        chars[i] == "\n" ||
        chars[i] == "\f" ||
        chars[i] == "\t" ||
        chars[i] == " ") {
      chars.splice(i, 1);
    } else {
      break;
    }
  }

  // Recreate the string with the join(  ) method and return the result.
  return chars.join("");
};

// Create a string with beginning and ending whitespace.
myString = "\n\r\f\ta string\t\t\n\n";

/* Display the value before calling the trim(  ) method. Displays:
this string value is: 


        a string                

<end>
*/
trace("this string value is: " + myString + "<end>");

// Set myString to the value returned by the trim(  ) method.
myString = myString.trim(  );

/* Now, display the value again using the same trace(  ) statement. Displays:
this string value is: a string<end>
*/
trace("this string value is: " + myString + "<end>");

For good measure, here is a trim function implemented using the RegExp class:

// You must include the third-party RegExp.as file from Recipe 9.6.
#include "RegExp.as"
var trimRe = new RegExp("^\\s*|\\s*$");
var myString = "\r\n\f\t test string \r\n\f\t";
trace(myString.replace(trimRe, ""));  // Displays: test string
    [ Team LiB ] Previous Section Next Section