Santhosh Nayak
Santhosh Nayak

Reputation: 2288

C# regex to validate filename

I want to replace these characters with string.Empty:'"<>?*/\| in given Filename How to do that using Regex I have tried this:

Regex r = new Regex("(?:[^a-z0-9.]|(?<=['\"]))", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled);
                 FileName = r.Replace(FileName, String.Empty);

but this replaces all special characters with String.Empty.

Upvotes: 2

Views: 5022

Answers (2)

Darin Dimitrov
Darin Dimitrov

Reputation: 1039488

You could use the Regex.Replace method. It does what its name suggests.

Regex regex = new Regex(@"[\\'\\""\\<\\>\\?\\*\\/\\\\\|]");
var filename = "dfgdfg'\"<>?*/\\|dfdf";
filename = regex.Replace(filename, string.Empty);

But I'd rather sanitize it for all characters that are forbidden in a filename under the file system that you are currently using, not only the characters that you have defined in your regex because you might have forgotten something:

private static readonly char[] InvalidfilenameCharacters = Path.GetInvalidFileNameChars();

public static string SanitizeFileName(string filename)
{
    return new string(
        filename
            .Where(x => !InvalidfilenameCharacters.Contains(x))
            .ToArray()
    );
}

and then:

var filename = SanitizeFileName("dfgdfg'\"<>?*/\\|dfdf");

Upvotes: 5

Stephan Schinkel
Stephan Schinkel

Reputation: 5540

look here how to do it:

How to remove illegal characters from path and filenames?

remember to use Path.GetInvalidFileNameChars()

Upvotes: 2

Related Questions