3

I'm looking for a javascript function which takes a string parameter and checks for ascii characters lower than 32, replacing them with empty string -> "". I'm new to javascript so I was wondering whether anyone can point me towards the right direction ?

Thanks in advance for your time.

Pumpkin
  • 1,993
  • 3
  • 26
  • 32

3 Answers3

7

Try this:

var replaced = string.replaceAll("[^ -~]", "");

Using ^ negates the characters class, and since space is character 32 in the ASCII table and ~ is the last printable character, you're basically saying "everything that isn't a printable character".

To simply remove all characters from 0-31 use:

var replace = string.replaceAll("\x00-\x1F", "");
Sean Airey
  • 6,352
  • 1
  • 20
  • 38
1

If I understand your question correctly you are looking for a regex to use with .replace...

For replacing any printable ascii chars you can use this regex:

/[ -~]/

You will probably have to adjust the range. I recommend changing the tilder since it is the last printable char.

Sorry, I see what you mean! I think you cannot match unprintable chars unless use use their special symbol: i.e. \b \s \n etc.

Joseph Adams
  • 972
  • 1
  • 6
  • 19
1
function keepCharsAbove(inStr, charCode) {
  var goodChars = [];
  for(var x = 0; x < inStr.length; x++) {
      if(inStr.charCodeAt(x) > charCode) {
          goodChars.push(inStr.charAt(x));
      }
  }

  return goodChars.join("");
}

​ Usage:

keepCharsAbove("foo \t bar",32); // returns 'foobar'
lostsource
  • 21,070
  • 8
  • 66
  • 88
  • This would probably be better by converting the input to an array of single character strings, filtering the array (`Array.filter`) and then joining back into a string. (A more functional approach.) – Richard Nov 15 '12 at 13:42