正则表达式文件名

时间:2013-07-15 07:05:56

标签: php regex

我有一个网站,我想用jQuery / ajax上传我的图片。 问题是我的图像有奇怪的文件名。像点或其他。 我尝试过这种模式,但效果不好,它取代了文件扩展名中的点,例如,如果我有

image.test.png

成为

imagetestpng

但我想要这个:

imagetest.png

这是我的代码:

$name = $_FILES['upload']['name'];
$size = $_FILES['upload']['size'];
$name = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $name);
echo($name);

如何解决这个问题? 感谢

2 个答案:

答案 0 :(得分:2)

您可以使用它来替换文件名中的字符,同时保留文件扩展名。

$name = preg_replace('/[^a-zA-Z0-9_-]+/',
                     "",
                     pathinfo($name, PATHINFO_FILENAME)
        ) . (pathinfo($name, PATHINFO_EXTENSION)?"." . pathinfo($name, PATHINFO_EXTENSION):"");

答案 1 :(得分:2)

首先,您需要分解文件名:

$info = pathinfo($name);

然后在两个部分上应用过滤器:

$name = preg_replace("/[^\w-]+/", "", $info['filename']);
// check if we have an extension
if (isset($info['extension'])) {
    $name .= '.' . preg_replace('/[^\w]/', '', $info['extension']);
}

Demo