[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 メーリングリストの案内