<<前 [TOP] 次>>
今まででは文字列であるということは判別できましたが、ひらがなや半角英数などのチェックは行っていません。
これらのチェックは正規表現を用いて解決することができます。
PHPで正規表現を扱うにはereg()関数を使用します。
ereg( 正規表現, 文字列 [,オプション:検索結果を記録する配列 ]);
文字列$strが英数文字かどうかをチェックするには以下のようにします。
if (ereg("^[\x21-\x7e]+$", $str)) { print("一致\n"); }
正規表現の「^」は先頭、「$」は終了、「+」は直前の文字が最低1回現れていることをあらわします。
英数記号を調べるために[\x21-\x7e]を使用します。
ちなみに、「0x」は16進数であることを示します。
また、ひらがなかどうかのチェックはmbstringというモジュールにある正規表現mb_ereg()関数を使用します。
下記は連続したひらがなと「ー」「−」をひらがなのチェックとしています。
文字エンコーディングは作成しているファイルと同一のものにしてください。
// 文字エンコーディングがUTF-8のファイルの場合 mb_regex_encoding("UTF-8"); if (mb_ereg("^[ぁ-んー−]+$", $str)) { print("一致\n"); }
PHPの設定を行ったときに、 php.iniファイルで「mbstring.internal_encoding = SJIS」と設定しました。
このmb_regexのデフォルトエンコーディングを表示するには、「mb_regex_encoding()」を使用します。
print("regex_encoding= ". mb_regex_encoding()."<br>\n");
PHPのプログラムファイルの文字エンコードは「UTF-8」で保存しているので、mb_regex_encoding()を使用して文字エンコードを指定しなければなりません。
mb_regex_encoding("UTF-8");
以下のHTMLファイルとPHPプログラムをテキストエディタで作成して「phpsample」フォルダに保存して下さい。
【enq2.html】
<p>下記の値を入力してください。</p> <form action="enq-result2.php" method="post"> <p> 姓(必須): <input type="text" name="sei_kan"><br> 名(必須): <input type="text" name="mei_kan"><br> せい(ひらがな:必須): <input type="text" name="sei_kana"><br> めい(ひらがな:必須):<input type="text" name="mei_kana"><br> メールアドレス(半角英数:必須): <input type="text" name="mail1"><br> メールアドレス確認(半角英数:必須): <input type="text" name="mail2"><br> </p> <input type="submit"> <input type="reset"> </form>
【enq-result2.php】
<p>呼び出されたPHPプログラム</p> <?php $error=0; $sei_kan=$_POST['sei_kan']; $mei_kan=$_POST['mei_kan']; $sei_kana=$_POST['sei_kana']; $mei_kana=$_POST['mei_kana']; $mail1=$_POST['mail1']; $mail2=$_POST['mail2']; if ($sei_kan == "") { $error=1; $message="姓"; } else if ($mei_kan == "") { $error=1; $message="名"; } else if ($sei_kana == "") { $error=1; $message="せい"; } else if ($mei_kana == "") { $error=1; $message="めい"; } else if ($mail1 == "") { $error=1; $message="メールアドレス"; } else if ($mail2 == "") { $error=1; $message="確認メールアドレス"; } // mb_regexのデフォルトエンコーディングを表示します print("デフォルトエンコーディング"); print("regex_encoding= ". mb_regex_encoding()."<br>\n"); // デフォルトエンコーディングとこのPHPファイルの文字エンコーディングが違うので、「UTF-8」を指定 mb_regex_encoding("UTF-8"); print("変更後のエンコーディング"); print("regex_encoding= ". mb_regex_encoding()."<br>\n"); if (!mb_ereg("^[\x21-\x7e]+$", $mail1)) { $error=2; $message="メールアドレスは半角英数でお願いします。"; } else if (!mb_ereg("^[ぁ-んー−]+$", $sei_kana)) { $error=2; $message="せいはひらがなでお願いします。"; } if ($error == 1) { print("<bold>${message}</bold>が入力されていません。"); print("前のページに戻って入力してください。<br>\n"); } else if ($error == 2) { print($message); print("前のページに戻って入力してください。<br>\n"); } else { print("確認画面<br>\n"); printf("姓名(ひらがな):%s%s(%s%s)<br>\n", $sei_kan, $mei_kan, $sei_kana, $mei_kana); print("メールアドレス${mail1}<br>\n"); } ?>
Apacheを起動し、Webブラウザで「http://localhost/phpsample/enq2.html」にアクセスして実行結果を確認してください。
↓↓クリックして頂けると励みになります。