半角、全角対応のファイル名を入力するフォームを作ったのですが
①Windowsでファイル名に使うことができない
『/、?、¥、:、*、|、<、>』の使用不可文字の使用禁止
②../などのパス指定のような並びを禁止
を行いたいのですが
その場合はどのようにバリデーションをかければ実現できますでしょうか?
追記
①を禁止したい場合
明確なコードでの回答がいただけなかったため記載させていただきました。
preg_match('/\{¥/:?<>|\}/',$フォームの変数){ エラー処理 }
でいいのでしょうか?
\の必要さがいまいちわかりません。
また別サイトに書き込まれていました
preg_match('@[¥/:?<>|]@',$変数)
ともありましたがこの@の意味はなんなのでしょうか?
この場合でも同じ結果になるのでしょうか?
②の場合は
なにかいいバリデーションありますでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
バリデーションして結果をどうしたいか次第じゃないですか?
想定外の文字がでてきたときに
- 処理をしない
- 想定外の文字を取り除き処理をつづける
によってことなります。
前者であればpreg_matchなどでマッチした瞬間にエラーとすればいいし
後者であればstr_replaceなどで強制的に問題文字を取り除けばいいでしょう
(リプレース後の文字が既存のファイルと名前競合する可能性は視野にいれてください)
投稿2017/01/10 07:21
総合スコア114572
0
ベストアンサー
UTF-8に変換したうえで、文字列長で比較する方法がありますね。
参考
php
1function check($s){ 2 return strlen($s) !== strlen(mb_convert_encoding(mb_convert_encoding($s,'SJIS','UTF-8'),'UTF-8','SJIS')); 3}
###正規表現によるチェック
php
1$test = 'a\\b'; 2//この正規表現では、「\,:,?,<,>,|」と「./」と「../」を検索します。 3//(あえてスラッシュは正規表現の検索対象としていません。) 4$a = preg_match('#[\\\:?<>|]|\.{1,2}/#', $test,$m);
###追記
php
1/** 2 * 機種依存文字チェック 3 * @param type $text 4 * @return boolean 5 */ 6function platform_dependent_characters_filter($text) { 7 8 mb_regex_encoding('UTF-8'); 9 //$pdcでチェックの対象とする文字を設定 10 $pdc = '⑩⑪⑫⑬⑭⑯⑰⑱⑲⑳'; 11 $pdc_array = Array(); 12 $pdc_text = str_replace(array("\r\n", "\n", "\r"), '', $text); 13 //チェック対象を配列化 14 while ($iLen = mb_strlen($pdc, 'UTF-8')) { 15 array_push($pdc_array, mb_substr($pdc, 0, 1, 'UTF-8')); 16 $pdc = mb_substr($pdc, 1, $iLen, 'UTF-8'); 17 } 18 19 //特殊文字が無いかどうかチェックする 20 foreach ($pdc_array as $value) { 21 if (preg_match("/(" . $value . ")/", $pdc_text)) { 22 return true; 23 } 24 } 25 return false; 26}
投稿2017/01/10 07:14
編集2017/01/10 09:17総合スコア3027
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/10 07:59 編集
2017/01/10 08:00
2017/01/10 08:08
2017/01/10 08:13
2017/01/10 08:19
2017/01/10 08:23
2017/01/10 08:56 編集
2017/01/10 09:02
2017/01/10 09:10 編集
2017/01/10 09:16
2017/01/10 09:21
2017/01/10 09:31
2017/01/10 10:20
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/10 07:38 編集