PHP Regex for filename

filenames, php, preg-match, preg-replace, regex

Solution

preg_replace('/[^A-Za-z0-9 _ .-]/', '', $filename);

The [] is a character class and the ^ negates it. So it literally matches anything other than the chars in that group.

Note that `-` is at the end, as it is a special range character if used elsewhere, e.g. 0-9

Problem

I made the user possible to change file names through a textarea, but now I'm having a regex problem. As I see for Windows 7, these characters only are not allowed for filenames: `\ / : * ? < > |` But I stubbornly, perhaps also wisely, choose to minimize the regex to ONLY these special characters: `- _ .` All the others should have to be cut. Can someone help me out with this regex? preg_replace all but: `A-Za-z0-9` and `- _ .` I still really don't get the hang of it.

Original source