前回記事数字入力について考える1では、意図しない入力があった際に、フィルターや関数を利用してもうまく処理できないことを確認しました。今回はそんな中で0~100までの整数値の入力チェックについて考えていきたいと思います。8月9日記事
目次
想定されるものとしてはこんな感じです。全角の数字のみを入力されたら変換ぐらいするぐらいの配慮はしていきたいと思います。
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>数字チェック</title> </head> <body> <form action="confirm.php" method="post"> <dl> <dt>0から100までの数字を入力してください。</dt> <dd><input type="text" name="number"></dd> </dl> <input type="submit" name="submit" value="check"> </form> </body> </html>
実務で早くしたいようであれば、次の関数を使ってチェックだけすればできます。全角数字だけは半角数字になおしてあげます。
<?php $number = $_POST["number"]; //変換してあげる $number = mb_convert_kana($number ,'n');//全角数字を半角数字に直す関数と引数 //エラー処理 $error = '';//$error = NULL;でもいい。 //文字列処理及び正の整数 if(!ctype_digit($number)) $error .= '数字ではありません。<br>';//正の整数かチェックするプログラム //0~100まででなかったら if($number < 0 || $number > 100) $error .= '0未満100より大きい数字が入力されています。'; if($error == ''){ echo $number; }else{ echo $error; } ?>
<?php $number = $_POST["number"]; //変換してあげる $number = mb_convert_kana($number ,'n');//全角数字を半角数字に直す関数と引数 //エラー処理 $error = '';//$error = NULL;でもいい。 if(preg_match("/^[-]/",$number)) $error .= 'マイナスが入力されています。<br>';//先頭に⁻があれば負の数だという正規表現 if(!is_numeric($number)) $error .= '数値ではありません。<br>';//数値であると判定する関数に否定の!を付ける。 if(preg_match("/.[\.]/",$number)) $error .= '小数点が入力されています。<br>';//途中に小数点があれば小数点と表示させる正規表現 if($number < 0 || $number > 100) $error .= '0未満100より大きい数字が入力されています。'; if($error == ''){ echo $number; }else{ echo $error; } ?>
実務という意味ではやはり、簡単versionのほうが楽です。簡単versionのほうがよく使われいます。厳密にいいたい場合は正規表現を使ってみてはいかがでしょうか?
以上