###前提・実現したいこと
フォームから送信されたCSVファイルをバリデーションしたいです。具体的にはcsvファイルかどうかを調べた後、SqlFileObjectを使い、CSVファイルを開いて行展開し、list関数を使い変数 $phone_number に格納して、その変数に対して、正規表現をかけてバリデーションしています。$request以外の変数などをvalidate()を使いバリデーションできますでしょうか?
※追記
CSVファイルのレコードを変数に展開して、
その変数の電話番号に対して正規表現をかけたいです。
###該当のソースコード
php
1 /** 2 * CSVデータインポート処理 3 * 4 * @author Fujii Tatsuya 5 * @since 2018-03-16 6 * @param Request $request CSVファイル 7 */ 8 public function update(Request $request) 9 { 10 // ファイルアップロード判定 11 if (!is_uploaded_file($_FILES["csvfile"]["tmp_name"])) { 12 $err_msg = 'ファイルが選択されていません。'; 13 return redirect('/import')->with('err_msg', $err_msg); 14 } 15 16 // ファイルパス格納 17 $file_path = $_FILES["csvfile"]["tmp_name"]; 18 // ファイルネーム格納 19 $file_name = $_FILES["csvfile"]["name"]; 20 21 // 拡張子判定 22 if (pathinfo($file_name, PATHINFO_EXTENSION) != 'csv') { 23 $err_msg = 'CSVファイルのみ対応しています。'; 24 return redirect()->route('import.edit')->with('err_msg', $err_msg); 25 } 26 27 // エラーデータのメッセージの格納 28 $err_datas = collect($this->uploadCsv($file_path)); 29 $msg = "ファイルアップロードが完了しました"; 30 return view('rikunavis.edit', compact('msg', 'err_datas')); 31
【uploadCsv】 private function uploadCsv(string $file_path) { // csvファイル読み込み $file = new SplFileObject($file_path); $file->setFlags(SplFileObject::READ_CSV); // エラー行を格納する配列を定義 $err_data = []; foreach ($file as $key => $row) { // ヘッダ無視 if ($key === 0) continue; list( $company_id, $employment_site_id, $company_name, $phone_number, $created_at, $updated_at ) = $row; /* * バリデーション */ // 電話番号の存在確認 if ($phone_number) { // 電話番号は正しい形式か? if (preg_match('/([0-9]{2,4}-[0-9]{2,4}-[0-9]{3,4})/', $phone_number, $match)) { $phone_number = $match[0]; } else { $err_data[] = "会社ID ${company_id} の電話番号 ${phone_number} の形式が違います。確認してください"; continue; } 以下略
###補足情報(言語/FW/ツール等のバージョンなど)
開発環境:Vagrant + VirtualBox / Homestead
言語:php-7.1.14 (NTS)
フレームワーク:Laravel5.5 (LTS)
サーバー:nginx
DB:MySQL
validate()などを使い正規表現バリデーションはできますでしょうか? > どの範囲をどの条件でどのようにしたいかを明確にしないと、適切な回答は得にくいかと思います。
回答1件
あなたの回答
tips
プレビュー