2012-12-04 92 views
1

我所做的用户有可能通过一个文本来更改文件名,但现在我有一个正则表达式的问题。PHP正则表达式的文件名

正如我所看到的Windows 7,这些字符只能是不允许的文件名:

\/: * ? < > |

但我固执,或许也是明智的,选择正则表达式减少到只有这些特殊字符:

- _ .

所有其他人都应该被削减。

有人可以帮我这个正则表达式?

的preg_replace所有,但: A-Za-z0-9- _ .

我还真不明白它的窍门。

+1

或简单'str_replace函数();'与这样' '''' – rsz

+3

[^ A-ZA-Z0-9 \ -_]'一个空字符串替换unneded字符。 “任何不是以下任何一项......” –

+1

你尝试过什么吗?谷歌搜索*正则表达式文件名*给你很多有用的结果。 – Tchoupi

回答

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

的[]是一个字符类和^取消它。所以它实际上与该组中的其他字符匹配。

注意-是在端部,因为它是一种特殊的范围字符如果别处使用,例如0-9

+1

但是空格????? – Phoenix

+0

应该是\。?Dot表示任何字符。 – Gerfried

3

你的问题有字符集漂亮,多布置了。你只需要将它插入preg_replace()就可以了。

试试这个:

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

^在字符集的开头,通过[]包围,各国字符-match列表。因此,该行可被视为“替换不是以下的字符”。