今回は、入力された値が数値かどうか検証する関数について学んでいこうと思います。
今回使用する関数、それが、
- ctype_digit()
- is_numeric()
の2つになります。
まずはいつも通り、HTMLをエスケープするプログラムを作成します。一応ここに記載しておきますが、私の投稿ではほぼいつも記載しているので使い回しで結構です。
h.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>HTMLでのエスケープ処理をする関数</title>
</head>
<body>
<?php
//HTMLでのエスケープ処理をする関数
function h($var) {
// is_array() -> $varが配列かどうかを調べる
// $varが配列だったら・・・
if (is_array($var)) {
// array_map() -> 配列の各要素に対して指定した関数を実行する
// array_map('コールバック関数名',配列)
return array_map('h', ($var));
// $varが配列じゃなかったら・・・
} else {
// フォームなどからのユーザーのデータをブラウザに表示する場合は、
// 原則すべてのデータにhtmlspecialchars関数を使用する。
// ENT_QUOTES -> クオートを変換する
return htmlspecialchars($var, ENT_QUOTES, 'UTF-8');
}
}
?>
</body>
</html>
そして今回の関数です。
form_ctype_digit.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>数値かどうかをチェックする</title>
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
</head>
<body>
<?php
// HTMLをエスケープする関数を読み込む
require_once('h.php');
// もし'number'nameが送信されたら・・・
if (isset($_POST['number'])) {
// 変数に格納する
$number = $_POST['number'];
// ctype_digit()関数->文字列のすべてが数字であるかどうかの検査(文字列型で渡す)
echo '<p>ctype_digit()関数: </p>';
// postの値をctype_digit()関数に
if (ctype_digit($number)) {
echo h($number)."は数値です";
} else {
echo h($number)."は数値ではありません";
}
// is_numeric()関数->小数点を含んだ場合、「+0123.45e6」のような指数表記、
// 「0xFF」のような16進数表記の文字列も数値と判断。
// 数値である場合はtrue、そうでない場合はfalseを返す
echo '<p>is_numeric()関数: </p>';
if (is_numeric($number)) {
echo h($number)."は数値です";
} else {
echo h($number)."は数値ではありません";
}
}
?>
<form action="form_ctype_digit.php" method="post">
<p>数字を入力してください</p>
<input type="text" name="number" value="">
<input type="submit" value="送信する">
</form>
</body>
</html>
実行すると↑こんなプログラムが出来上がります。簡単だね!