[PHP-users 19490]Re: 型チェックについて

Osamu Shigematsu shige @ ravi.ne.jp
2003年 12月 22日 (月) 09:29:08 JST


重松です。

フォームから受け取ったものは、全部文字列です。
以下のようにして確認できると思います。(多分)

	var_dump($_POST);

フォームは何でも入力できるわけで、数値かどうかは、
PHP で処理する上で判断すべき問題でしょう。

仮に数値しか渡されたくないから、仮にポップアップなどを使ったとしても、
不正な値を突っ込んでこないとは限りませんから、値は結局、
きちんと確認しないといけません。

文字列が数値として正しいかどうか判定するならば、
他の方がおっしゃっているようにキャストする方法や、
あるいは、正規表現を使う方法があります。

具体的なコードとしては、

<?php
	$err = array();

	// いわゆる「全角」数字とスペースを「半角」に変換
	// 前後に空白があれば取り除く
	$age = trim(mb_convert_kana($_POST['age'], 'ns'));

	if (mb_ereg('[^0-9]', $age)) {
		// 数字以外が含まれている
		$err['age'] = '数字以外の文字が入力されています';
	}
	else if ($age < 20 || $age >= 60) {
		// 年齢が不正
		$err['age'] = '20 歳以上, 60 歳未満の方でないと'.
				'お申し込みいただけません';
	}

	// 他も確認する

	if (count($err)) {
		// いずれかの入力項目に誤りがあった
		// 再入力用のフォームを表示
		include 'error_form.php';
	}
	else {
		// 確認用のフォームを表示
		include 'confirm.php';
	}
?>

というような流れになるでしょう。

上記のように、mb_convert_kana() という関数を使えば、いわゆる「全角」で
入力された数字を半角にできるので、「数字は半角でお願いします」などと、
不便を強いることなく、柔軟に対応できます。

正規表現は、最初は難解に感じるかもしれませんが、PHP では、
ruby 互換の mb_ereg 系 (PHP 4.3.3 位まではマルチバイト文字が使用可能,
つまり、--enable-mbstring でも、別途 --enable-mbregex を指定する必要あり。
それ以降は、鬼車になって、マルチバイト文字が使用可能なら、
自動的に有効になる ... ということでよろしいでしょうか?>小泉さん) と、
perl 互換の PCRE (preg 系)、POSIX 互換ということになっているらしい素の
ereg 系 (mb_ereg に置き換える機能もあり) があります。

どの正規表現が使えるのかは、コマンドライン版ならば、

	$ php -i

とすると、インストールされている機能など確認できます。
あるいは、(それ以外の PHP, DSO 版や CGI 版などでも)

	<?php phpinfo(); ?>

として、phpinfo() 関数の結果で確認できます。

-- 
Osamu Shigematsu
http://www.ravi.ne.jp/%7eshige/



PHP-users メーリングリストの案内