Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detecting "\" (backslash) using Regex

Tags:

c#

regex

I have a C# Regex like

[\"\'\\/]+

that I want to use to evaluate and return error if certain special characters are found in a string.

My test string is:

\test

I have a call to this method to validate the string:

public static bool validateComments(string input, out string errorString)
{
    errorString = null;
    bool result;

    result = !Regex.IsMatch(input, "[\"\'\\/]+");  // result is true if no match
                                                   // return an error if match

    if (result == false)
        errorString = "Comments cannot contain quotes (double or single) or slashes.";

    return result;
}

However, I am unable to match the backslash. I have tried several tools such as regexpal and a VS2012 extension that both seem to match this regex just fine, but the C# code itself won't. I do realize that C# is escaping the string as it is coming in from a Javascript Ajax call, so is there another way to match this string?

It does match /test or 'test or "test, just not \test

like image 619
Philethius Avatar asked Dec 15 '25 12:12

Philethius


1 Answers

The \ is used even by Regex(es). Try "[\"\'\\\\/]+" (so double escape the \)

Note that you could have @"[""'\\/]+" and perhaps it would be more readable :-) (by using the @ the only character you have to escape is the ", by the use of a second "")

You don't really need the +, because in the end [...] means "one of", and it's enough for you.

Don't eat what you can't chew... Instead of regexes use

// result is true if no match
result = input.IndexOfAny(new[] { '"', '\'', '\\', '/' }) == -1;  

I don't think anyone ever lost the work because he preferred IndexOf instead of a regex :-)

like image 91
xanatos Avatar answered Dec 17 '25 05:12

xanatos