使用PHP验证文件名(仅包含“a-z”,“0-9”和“-”)

8

什么是使用PHP验证文件名的最佳方法,我该如何做?

我想要检查文件名是否只包含“a-z”、“0-9”和“-”。同时确保文件名没有大写字母。

$file = 'the-name.ext';

if ($file == 'only contains a-z, 0-9 or "-"' // HOW TO
&& $file == 'lowercasse'  // HOW TO
&& $file == 'a-z')  // HOW TO
{
    // upload code here
}
else{
    echo 'The file "' . $file . '"was not uploaded. The file can only contain "a-z", "0-9" and "-". Allso the files must be lowercasse. ';
}

我最终做了类似这样的事情,来消除文件扩展名:

$filename = 'fil-name.jpg';
$filname_without_ext = pathinfo($filename, PATHINFO_FILENAME);
if(preg_match('/^[a-z0-9-]+$/',$filname_without_ext)) {
   echo'$file is valid';
} else {
   echo'$file is not valid';
}

1
顺便提一下:你的else消息有误导性,因为它似乎是指文件内容而不是名称。 - Grant Thomas
3个回答

11
if(preg_match('/^[a-z0-9-]+\.ext$/', $file)) {
    // .. upload
} else {
    echo 'The file "' . $file . '"was not uploaded. The file can only contain "a-z", "0-9" and "-". Allso the files must be lowercase. ';

}

ext替换为所需的扩展名。或者更好的方法是使用pathinfo去掉它,并使用finfo来确保文件是正确的类型。


谢谢Michael,这就是我没能使它起作用的原因。我忘记了文件扩展名... - Hakan

2
if(preg_match('/^[a-z0-9-]+$/',$file)) {
   // $file is valid
} else {
   // $file is not valid
}

1
不支持扩展名。例如:example.ext - user3292653

1

只需使用正则表达式即可为您完成工作

([a-z0-9-]+)

这个模式将匹配小写字母a-z、数字0-9和短横线-


1
这将忽略任何文件扩展名。 - Michael Robinson
为什么不允许使用下划线? - bart
@bart 我不知道,这个问题要求验证我的正则表达式所验证的内容。如果您还想包括下划线,那么应该是([a-z0-9-_]+) - OptimusCrime

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接