Helper method to Replace/Remove characters that do not match the Regular Expression

Posted by Michael Freidgeim on Geeks with Blogs See other posts from Geeks with Blogs or by Michael Freidgeim
Published on Sun, 28 Oct 2012 11:30:09 GMT Indexed on 2012/10/28 11:03 UTC
Read the original article Hit count: 348

Filed under:
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.
               //[^ ] 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

© Geeks with Blogs or respective owner