I want to replace all Special Characters which can't be parse in URL including space, double space or any big space with '-' using C#.
I don't want to use any Parse Method like System.Web.HttpUtility.UrlEncode.
How to do this ? I want to include any number of space between two words with just one '-'.
For example, if string is Hello# , how are you?
Then, Result should be, Hello-how-are-you, no '-' if last index is any special character or space.
3 Answers
string str = "Hello# , how are you?"; string newstr = ""; //Checks for last character is special charact var regexItem = new Regex("[^a-zA-Z0-9_.]+"); //remove last character if its special if (regexItem.IsMatch(str[str.Length - 1].ToString())) { newstr = str.Remove(str.Length - 1); } string replacestr = Regex.Replace(newstr, "[^a-zA-Z0-9_]+", "-"); INPUT: Hello# , how are you?
OUTPUT: Hello-how-are-you
EDIT: Wrap it inside a class
public static class StringCheck { public static string Checker() { string str = "Hello# , how are you?"; string newstr = null; var regexItem = new Regex("[^a-zA-Z0-9_.]+"); if (regexItem.IsMatch(str[str.Length - 1].ToString())) { newstr = str.Remove(str.Length - 1); } string replacestr = Regex.Replace(newstr, "[^a-zA-Z0-9_]+", "-"); return replacestr; } } and call like this,
string Result = StringCheck.Checker(); 2string[] arr1 = new string[] { " ", "@", "&" }; newString = oldString; foreach repl in arr1 { newString= newString.Replace(repl, "-"); } Of course you can add into an array all of your spec characters, and looping trough that, not only the " ".
More about the replace method at the following link
1You need two steps to remove last special character and to replace all the remaining one or more special characters with _
public static void Main() { string str = "Hello# , how are you?"; string remove = Regex.Replace(str, @"[\W_]$", ""); string result = Regex.Replace(remove, @"[\W_]+", "-"); Console.WriteLine(result); Console.ReadLine(); }