Filter a String

Gabe picture Gabe · May 25, 2009 · Viewed 33.1k times · Source

I want to make sure a string has only characters in this range

[a-z] && [A-Z] && [0-9] && [-]

so all letters and numbers plus the hyphen. I tried this...

C# App:

        char[] filteredChars = { ',', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '=', '{', '}', '[', ']', ':', ';', '"', '\'', '?', '/', '.', '<', '>', '\\', '|' };
        string s = str.TrimStart(filteredChars);

This TrimStart() only seems to work with letters no otehr characters like $ % etc

Did I implement it wrong? Is there a better way to do it?

I just want to avoid looping through each string's index checking because there will be a lot of strings to do...

Thoughts?

Thanks!

Answer

Tomas Aschan picture Tomas Aschan · May 25, 2009

This seems like a perfectly valid reason to use a regular expression.

bool stringIsValid = Regex.IsMatch(inputString, @"^[a-zA-Z0-9\-]*?$");

In response to miguel's comment, you could do this to remove all unwanted characters:

string cleanString = Regex.Replace(inputString, @"[^a-zA-Z0-9\-]", "");

Note that the caret (^) is now placed inside the character class, thus negating it (matching any non-allowed character).