4

我让用户可以通过文本区域更改文件名,但现在我遇到了正则表达式问题。

正如我在 Windows 7 中看到的那样,文件名仅允许使用这些字符:

\ / : * ? < > |

但我固执地,也许也是明智地选择将正则表达式最小化为仅这些特殊字符:

- _ .

所有其他的都应该被砍掉。

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

preg_replace 除了: A-Za-z0-9- _ .

我还是真的不明白。

4

2 回答 2

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

[] 是一个字符类,而 ^ 否定它。所以它实际上匹配除了该组中的字符之外的任何内容。

请注意,-在末尾,因为如果在其他地方使用它是一个特殊的范围字符,例如 0-9

于 2012-12-04T15:21:27.360 回答
4

您的问题已经列出了相当多的字符集。您只需将其插入preg_replace()即可启动。

试试这个:

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

字符集^开头的 ,由 包围[],表示匹配字符列表。因此,该行可以理解为“替换不是以下的字符”。

于 2012-12-04T15:21:51.737 回答