
こんな悩みを解決できる記事を書きました!
僕は現役フリーランスエンジニア(歴10年)で、資格は13個保有しています。
「LaravelのFormRequestでファイル名をバリデーションする方法を知りたい」とお考えではありませんか?
ファイル名に不適切な文字が含まれていると、セキュリティリスクやシステムエラーの原因になります。
適切にバリデーションを行えば、安全にファイルをアップロードできます。



超簡単なのでサクッと解説します。
ということで、本記事ではLaravelのFormRequestでファイル名をバリデーションする方法を解説します。





すぐ読み終わるので、ぜひ最後まで読んでくださいませ。
【Laravel】FormRequestでファイル名をバリデーションする方法
早速ですが、FormRequestでファイル名をバリデーションする方法を解説します。
php artisan make:request FileUploadRequest
FormRequestを作成します。
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class FileUploadRequest extends FormRequest
{
public function rules()
{
return [
'file' => [
'required',
'file',
function ($attribute, $value, $fail) {
if (!preg_match('/^[a-zA-Z0-9._-]+$/', $value->getClientOriginalName())) {
$fail('ファイル名には英数字、ピリオド、ハイフン、アンダースコアのみ使用できます。');
}
},
],
];
}
}
上記のようにすれば、ファイル名のバリデーションチェックを行えます。
namespace App\Http\Controllers;
use App\Http\Requests\FileUploadRequest;
use Illuminate\Http\Request;
class FileController extends Controller
{
public function upload(FileUploadRequest $request)
{
$file = $request->file('file');
$file->store('uploads');
return response()->json(['message' => 'ファイルがアップロードされました。']);
}
}
コントローラーでFormRequestを適用すればOKです。
よくある質問
Laravelのデフォルトのバリデーションルールだけでファイル名をチェックできますか?
デフォルトのルールではファイルの拡張子やサイズはチェックできますが、ファイル名自体のバリデーションはできません。
ファイル名に日本語を許可するにはどうすればいいですか?
正規表現で/^[\p{L}0-9._-]+$/u
のように記載すれば、日本語や他の言語の文字も許可できます。
まとめ
今回は、LaravelのFormRequestでファイル名をバリデーションする方法について解説しました。
以下が本記事のまとめになります。
- おすすめ本
Laravelの勉強なら「PHPフレームワーク Laravel入門 第2版



最後までお読みいただき、ありがとうございました!
- クソおすすめ本



海外のエンジニアがどういった思考で働いているかが理解できます。
海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。