HTMLフォームのバリデーション:ユーザー入力のエラーを防ぐ方法

HTMLフォームのバリデーション:ユーザー入力のエラーを防ぐ方法

はじめに

ウェブフォームを利用すると、ユーザーからのデータを収集できます。しかし、入力ミスや不正なデータが送信されることもあります。そこで活躍するのがバリデーション(入力検証)です。本記事では、HTMLのバリデーション機能を活用して、ユーザーの入力エラーを防ぐ方法を解説します。


HTMLのバリデーションとは?

バリデーションとは、フォームの入力データが適切であるかをチェックする仕組みです。バリデーションには、クライアントサイド(HTML・JavaScript)サーバーサイド(PHPなど)の2種類があります。

  • クライアントサイドバリデーション(HTMLやJavaScriptで実装)
    • 送信前にエラーをユーザーに通知できる
    • サーバーの負荷を減らせる
    • ただし、JavaScriptを無効にされた場合には機能しない
  • サーバーサイドバリデーション(PHPやNode.jsなどで実装)
    • より強固なデータ検証が可能
    • クライアントサイドのバリデーションを回避されても対応できる

安全性を高めるために、クライアントサイドとサーバーサイドの両方でバリデーションを実装するのがベストです。


HTMLの標準バリデーション機能

HTML5では、入力バリデーション用の属性を使うだけで、簡単にフォームのチェックができます。

1. 必須入力チェック (required)

required属性を追加すると、入力が必須になります。

HTML
<input type="text" name="username" required>

→ ユーザーが何も入力せずに送信しようとすると、エラーメッセージが表示されます。

2. 最小・最大文字数 (minlength / maxlength)

文字数の制限を設定できます。

HTML
<input type="text" name="username" minlength="3" maxlength="15" required>

→ 3文字未満または15文字を超えるとエラーになります。

3. 数値の範囲 (min / max / step)

数値入力の範囲を指定できます。

HTML
<input type="number" name="age" min="18" max="99" step="1" required>

→ 18未満または99を超えるとエラーになります。

4. メールアドレスの形式チェック (type="email")

メールアドレスの形式が正しいかをチェックします。

HTML
<input type="email" name="email" required>

user@example.comのような形式でないとエラーになります。

5. パターン(正規表現)チェック (pattern)

pattern属性を使うと、正規表現を使って細かいルールを設定できます。

HTML
<input type="text" name="zipcode" pattern="[0-9]{3}-[0-9]{4}" required>

123-4567のような郵便番号の形式のみ許可されます。

6. パスワードの条件設定

例えば、8文字以上・英数字を含むパスワードをチェックするには以下のようにします。

HTML
<input type="password" name="password" pattern="(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}" required>

バリデーションエラーメッセージのカスタマイズ

デフォルトのエラーメッセージはブラウザ依存ですが、title属性を追加すると独自のメッセージを表示できます。

HTML
<input type="text" name="username" minlength="3" title="3文字以上入力してください" required>

JavaScriptを使ったカスタムバリデーション

HTMLのバリデーションだけでは対応できない場合、JavaScriptを使ってチェックを強化できます。

1. setCustomValidity()でカスタムエラーメッセージを設定

以下の例では、ユーザー名が5文字未満の場合にカスタムメッセージを表示します。

HTML
<form id="myForm">
  <input type="text" id="username" name="username" required>
  <button type="submit">送信</button>
</form>

<script>
  document.getElementById("myForm").addEventListener("submit", function(event) {
    let username = document.getElementById("username");
    if (username.value.length < 5) {
      username.setCustomValidity("ユーザー名は5文字以上にしてください");
      event.preventDefault();
    } else {
      username.setCustomValidity(""); // 問題ない場合はエラーメッセージをリセット
    }
  });
</script>

サーバーサイドバリデーションの必要性

クライアントサイドでバリデーションを行っても、不正なデータを送信できる可能性があります。そのため、サーバーサイドでもデータチェックを行い、安全性を高めることが重要です。

例:PHPでのサーバーサイドバリデーション(メールアドレスのチェック)

PHP
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
  echo "無効なメールアドレスです";
}

まとめ

  • HTMLの標準バリデーションを使えば、簡単に入力エラーを防げる
  • requiredpatterntype などの属性を活用する
  • JavaScriptのsetCustomValidity()でカスタムエラーメッセージを設定できる
  • サーバーサイドのバリデーションも必ず実装する

フォームのバリデーションを適切に設定して、ユーザーにとって使いやすく、かつ安全な入力フォームを作成しましょう!


最後まで読んでいただきありがとうございます!

このブログは初心者向けwebデザイナー向けにHTML、CSSの基礎知識を発信しています。
この記事を読んだ方に少しでもお役に立てれば幸いです。

この記事を書いた人

目次