2011-12-14 5 views
4

PHPを使用してファイル名を検証する最良の方法は何ですか?PHPを使用してファイル名を検証する( "a-z"、 "0-9"、 " - ")

ファイル名に "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'メッセージが誤解を招きます名前ではなくファイルの内容を参照する。 –

答えて

8
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を使用してファイルが正しいタイプであることを確認します。

+0

感謝しているマイケル、そういうわけで私はそれを働かせなかったのです。私はファイル拡張子を忘れてしまった... – 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-]+) 

このパターンは、zは、0-9と一致します - 側の問題では

+1

これはファイル拡張子を無視する –

関連する問題