Reputation: 1175
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
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
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