問い合わせフォームや登録フォームなどで入力した値のバリデーションチェックは必須ですが、「あれってなんだったかな」ということがあるので、備忘録代わりにまとめました。
「いや、今ならフレームワークやライブラリであるだろ」というのがある気もしますが…
絵文字のチェック
今はデータベースの文字コードがutf8mb4であれば絵文字も問題なく登録できますが、古いデータベースでutf8までしか対応していなかったり、CSVをShift-JISで出力する場合は文字化けしてしまうので、弾いちゃおうと言うことです。
1 2 3 4 |
$strText = "がんばります🔪"; if (preg_match('/[\x{10000}-\x{10FFFF}]/u', $strText)) { echo "絵文字が入ってます"; } |
絵文字が入ってそうな文字コードをチェックして、あれば絵文字があると判断してる感じですね。
機種依存文字のチェック
機種依存文字もメール文面やらで文字化けするパターンがあるので、チェックしたいですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$strText = "FINAL FANTASY Ⅶ"; if (checkU2S($strText)) { echo "機種依存文字が入ってます"; } function checkU2S($s){ $mb_encode = mb_detect_encoding($s); if($mb_encode == "UTF-8"){ return strlen($s) !== strlen(mb_convert_encoding(mb_convert_encoding($s,'sjis','UTF-8'),'UTF-8','sjis')); }else{ return strlen($s) !== strlen(mb_convert_encoding(mb_convert_encoding($s,'sjis-win','UTF-8'),'UTF-8','sjis-win')); } } |
これは少しわかりづらいですが、機種依存文字をShift-JISに変換してからUTF-8に戻した場合、元の文字と異なる(〓などが入る)ので
そこでエラーを出すという感じです。
URLの正規表現
これはメジャーですが念のため書いておきます。注意すべきは文法のチェックであり、このURLが有効か無効かは判別できないと言うことですね
1 2 3 |
if (!preg_match('/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i' , $url )){ echo "URLに誤りがあります"; } |