TMNuclear
TMNuclear

Reputation: 1175

PHP Regex for filename

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.

Upvotes: 3

Views: 16583

Answers (2)

newfurniturey
newfurniturey

Reputation: 38416

Your question has the character-set pretty-much laid out already. You'll just need to plug it into preg_replace() to get it going.

Try this:

$filename = preg_replace('/[^a-zA-Z0-9_.-]/', '', $filename);

The ^ at the beginning of the character set, surrounded by [], states to not-match the list of characters. Therefore, the line can be read as "replace the characters that are not the following".

Upvotes: 4

Paul S
Paul S

Reputation: 1239

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

Upvotes: 16

Related Questions