Webフォームで「予算」や「金額」といった数字を入力してもらう場面は非常に多いですが、ユーザーは時に数字以外の文字(例:「1000円」や「abc」)を入力してしまう可能性があります。
もしプログラム側で「これは数字である」と決めつけて処理を進めると、予期せぬエラーや誤作動の原因となります。
そこで重要になるのが、**①データが期待通りの形式かを確認する「バリデーション」**と、**②データを分かりやすく表示する「フォーマット」**の2つのステップです。今回は、この2つの処理をPHPで実装する方法を解説します。
1. 入力値が数字かを確認する「バリデーション」
バリデーションとは、受け取ったデータが正しい形式やルールに則っているかを確認する、非常に重要な処理です。PHPには、そのための便利な関数が数多く用意されています。
入力値が数字または数字の文字列であるかを確認したい場合には、is_numeric()
関数を使いましょう。
is_numeric(値)
: 引数に渡した値が数字または数字の文字列であればtrue
(真)、そうでなければfalse
(偽)を返します。
この関数をif
文と組み合わせることで、「もし数字ならこの処理、数字でなければ別の処理」といった条件分岐を簡単に行うことができます。
is_numeric()
の基本動作:
<?php
is_numeric("1980"); // true
is_numeric(1980); // true
is_numeric("1980円"); // false (数字以外の文字が含まれるため)
is_numeric("abc"); // false
?>
2. 数字を読みやすく整える「フォーマット」
無事に数字であることが確認できたら、次はその数値をユーザーにとって読みやすい形式に整えましょう。例えば、「1000000」と表示するよりも「1,000,000」と3桁ごとにカンマ区切りで表示する方が、遥かに分かりやすいですよね。
このような表示形式の変更(フォーマット)には、number_format()
関数を使います。
number_format(数字)
: 引数に渡した数値を、3桁ごとのカンマ区切り文字列に変換して返します。
number_format()
の基本動作:
<?php
echo number_format(1234567);
// 出力結果: 1,234,567
?>
実装例:バリデーションとフォーマットを組み合わせる
それでは、これら2つの関数を組み合わせて、フォームから送信された「価格」を安全に表示するプログラムを作成してみましょう。
receive.php
のサンプルコード:
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>入力結果</title>
</head>
<body>
<h1>入力された価格</h1>
<?php
// form.html から 'price' という名前でデータが送信されたと仮定
$price = $_POST['price'];
// まず、入力値が数字かどうかを is_numeric() で判定する
if (is_numeric($price)) {
// 数字の場合:安全にエスケープし、カンマ区切りにフォーマットして表示
$formatted_price = number_format($price);
echo "<p>価格: " . htmlspecialchars($formatted_price, ENT_QUOTES, 'UTF-8') . "円</p>";
} else {
// 数字でない場合:エラーメッセージを表示
echo '<p style="color: red;">価格は半角数字で入力してください。</p>';
}
?>
<br>
<a href="form.html">入力フォームに戻る</a>
</body>
</html>
このコードでは、まずis_numeric()
で入力値が数字であるかを厳格にチェックします。数字であればnumber_format()
で整形して表示し、そうでなければユーザーに分かりやすいエラーメッセージを表示しています。
このようにバリデーションを正しく行うことで、プログラムのエラーを防ぐだけでなく、ユーザー体験(UX)の向上にも繋がります。
まとめ
今回は、ユーザーからの入力値を安全かつ分かりやすく扱うための基本を学びました。
- バリデーション:
is_numeric()
などを使い、データが期待する形式か必ずチェックする。 - フォーマット:
number_format()
などを使い、チェック済みのデータを読みやすく整形する。
**「まずチェック(バリデーション)、それから整形(フォーマット)」**という流れは、Web開発におけるデータ扱いの鉄則です。メールアドレスの形式チェックや文字数の制限など、バリデーションには様々な種類がありますが、まずはこのis_numeric()
をしっかりとマスターし、堅牢なプログラム作成の第一歩としましょう。