質問: 半角、全角対応のファイル名を入力するフォームを作ったのですが 1Windowsでファイル名に使うことができない 『/、?、¥、:、*、|、<、>』の使用不可文字の使用禁止 2../などのパス指定のような並びを禁止 を行いたいのですが その場合はどのようにバリデーションをかければ実現できますでしょうか? 追記 1を禁止したい場合 明確なコードでの回答がいただけなかったため記載させていただきました。 ``` preg_match('/\{¥/:?<>|\}/',$フォームの変数){ エラー処理 } ``` でいいのでしょうか? \の必要さがいまいちわかりません。 また別サイトに書き込まれていました ``` preg_match('@[¥/:?<>|]@',$変数) ``` ともありましたがこの@の意味はなんなのでしょうか? この場合でも同じ結果になるのでしょうか? 2の場合は なにかいいバリデーションありますでしょうか?
回答: バリデーションして結果をどうしたいか次第じゃないですか? 想定外の文字がでてきたときに * 処理をしない * 想定外の文字を取り除き処理をつづける によってことなります。 前者であればpreg_matchなどでマッチした瞬間にエラーとすればいいし 後者であればstr_replaceなどで強制的に問題文字を取り除けばいいでしょう (リプレース後の文字が既存のファイルと名前競合する可能性は視野にいれてください)