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.
[^ ] 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>
//[^ ] 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]";
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