这很简单,
但我正在整个目录列表(在PHP中使用dir()
),并确保它们:
现在我有
function isValidFile($filename) {
$dirDotExpr = "/^\.{1,2}$/"; //matches against "." and ".."
$extExpr = "/\.(jpg|jpeg|gif|png)$/i"; //checks file extension
return (1
&& ! preg_match($dirDotExpr, $filename)
&& preg_match($extExpr, $filename)
)
}
但是在一个正则表达式中完成所有操作会很好。但是,我不知道如何确保一件事情匹配,有一件事没有 - 我怎么能做到这一点?
答案 0 :(得分:6)
你可能会过度思考它。如果您要验证$filename
以.jpg,.jpeg,.gif或.png结尾,则显然不能是“。”或“......”。
答案 1 :(得分:1)
function isValidFile($filename)
{
return (bool) preg_match('/\.(?:jpe?g|gif|png)$/iD', (string) $filename);
}
请注意,为了提高速度,我将括号设为非捕获。还将jpg
和jpeg
合并到jpe?g
。另外,我添加了D
修饰符。如果不这样做,$
将允许最终换行;像“hello.jpg \ n”这样的文件名将被视为有效。非常清楚这一点。
答案 2 :(得分:0)
如果您不想在文件名中允许句点(名称和扩展名的分隔符除外):^ [^ \ x2E] + \ x2E(jpg | jpeg | gif | png)$
如果您允许句点(多部分名称):^([^ \ x2E] + \ x2E)+(jpg | jpeg | gif | png)$
根据需要转换为PHP ...