Helper method to Replace/Remove characters that do not match the Regular Expression
- by Michael Freidgeim
I have a few fields, that use regEx for validation. In case if provided field has unaccepted characters, I don't want to reject the whole field, as most of validators do, but just remove invalid characters. I am expecting to keep only Character Classes for allowed characters and created a helper method to strip unaccepted characters. The allowed pattern should be in Regex format, expect them wrapped in square brackets. function will insert a tilde after opening squere bracket , according to http://stackoverflow.com/questions/4460290/replace-chars-if-not-match. [^ ] at the start of a character class negates it - it matches characters not in the class.I anticipate that it could work not for all RegEx describing valid characters sets,but it works for relatively simple sets, that we are using. /// <summary> /// Replaces not expected characters. /// </summary> /// <param name="text"> The text.</param> /// <param name="allowedPattern"> The allowed pattern in Regex format, expect them wrapped in brackets</param> /// <param name="replacement"> The replacement.</param> /// <returns></returns> /// // http://stackoverflow.com/questions/4460290/replace-chars-if-not-match. //http://stackoverflow.com/questions/6154426/replace-remove-characters-that-do-not-match-the-regular-expression-net //[^ ] at the start of a character class negates it - it matches characters not in the class. //Replace/Remove characters that do not match the Regular Expression static public string ReplaceNotExpectedCharacters( this string text, string allowedPattern,string replacement ) { allowedPattern = allowedPattern.StripBrackets( "[", "]" ); //[^ ] at the start of a character class negates it - it matches characters not in the class. var result = Regex .Replace(text, @"[^" + allowedPattern + "]", replacement); return result; }static public string RemoveNonAlphanumericCharacters( this string text) { var result = text.ReplaceNotExpectedCharacters(NonAlphaNumericCharacters, "" ); return result; } public const string NonAlphaNumericCharacters = "[a-zA-Z0-9]";There are a couple of functions from my StringHelper class http://geekswithblogs.net/mnf/archive/2006/07/13/84942.aspx , that are used here. // /// <summary> /// 'StripBrackets checks that starts from sStart and ends with sEnd (case sensitive). /// 'If yes, than removes sStart and sEnd. /// 'Otherwise returns full string unchanges /// 'See also MidBetween /// </summary> /// <param name="str"></param> /// <param name="sStart"></param> /// <param name="sEnd"></param> /// <returns></returns> public static string StripBrackets( this string str, string sStart, string sEnd) { if (CheckBrackets(str, sStart, sEnd)) { str = str.Substring(sStart.Length, (str.Length - sStart.Length) - sEnd.Length); } return str; } public static bool CheckBrackets( string str, string sStart, string sEnd) { bool flag1 = (str != null ) && (str.StartsWith(sStart) && str.EndsWith(sEnd)); return flag1; } public static string WrapBrackets( string str, string sStartBracket, string sEndBracket) { StringBuilder builder1 = new StringBuilder(sStartBracket); builder1.Append(str); builder1.Append(sEndBracket); return builder1.ToString(); }v