【问题标题】:Validate filename using PHP ("a-z", "0-9" and "-")使用 PHP 验证文件名(“a-z”、“0-9”和“-”)
【发布时间】:2023-04-08 15:15:02
【问题描述】:

使用 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';
}

【问题讨论】:

  • 另一方面:您的 else 消息具有误导性,因为它似乎指的是文件内容,而不是名称。

标签: php file-upload filenames validation


【解决方案1】:
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 确保文件类型正确。

【讨论】:

  • 谢谢迈克尔,这就是我没有让它工作的原因。我忘记了文件扩展名...
【解决方案2】:
if(preg_match('/^[a-z0-9-]+$/',$file)) {
   // $file is valid
} else {
   // $file is not valid
}

【讨论】:

  • 不适用于扩展。示例:example.ext
【解决方案3】:

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

([a-z0-9-]+)

此模式将匹配 a-z、0-9 和 -

【讨论】:

  • 这会忽略任何文件扩展名
  • 为什么不允许下划线?
  • @bart 我不知道,在这个问题中被要求仅验证我的正则表达式验证的内容。如果您还想包含下划线,则为 ([a-z0-9-_]+)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
相关资源
最近更新 更多