学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

PHPグラミング入門その8 文字種の確認

>>この記事には書き直した新しいページがあります。<<


<<前  [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」にアクセスして実行結果を確認してください。








<<前  [TOP]  次>>