前回記事数字入力について考える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>



エラーチェックとエラーがなかった場合の表示

簡単versionのコード

実務で早くしたいようであれば、次の関数を使ってチェックだけすればできます。全角数字だけは半角数字になおしてあげます。

<?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;
}
?>



厳密にいうversionのコード

<?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のほうがよく使われいます。厳密にいいたい場合は正規表現を使ってみてはいかがでしょうか?

以上

最終更新:2015年08月09日 23:19
添付ファイル