読み込み中...

HTMLバリデーション入門!3つのステップで完璧なフォームを作成

HTMLバリデーションの基本的な使い方やカスタマイズ方法を学ぶ HTML
この記事は約21分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

📋 対応バージョン
HTML HTML5
JavaScript ES5+
IE 10+
Edge 12+
Chrome 4+
Firefox 4+
Safari 5+
完全対応 一部機能制限

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

ウェブフォームでユーザーから適切なデータを収集するためには、入力内容の検証が欠かせません。HTMLバリデーションは、フォームに入力されたデータが正しい形式に従っているかをチェックする仕組みです。この技術を活用することで、ユーザーの入力ミスを防ぎ、データの品質向上につながります。

●HTMLバリデーションとは

HTMLバリデーションは、フォームに入力されたデータが指定された条件を満たしているかを確認するプロセスです。HTML5では、属性を追加するだけで様々なバリデーション機能を簡単に実装できるようになりました。これにより、JavaScriptを使わずとも基本的な入力チェックが可能になります。

バリデーションの主な目的は、不正なデータの送信を防ぐことです。例えば、メールアドレス欄に「abc」のような無効な値が入力された場合、送信前にエラーを表示してユーザーに修正を促せます。

●バリデーションの作成方法

HTMLバリデーションを実装するには、以下の手順で進めてください。

○ステップ1:フォーム要素を用意する

バリデーションを適用するフォーム要素(inputやselectなど)を用意します。メールアドレスを入力するフォームの場合、以下のようなコードになります。

<form>
  <label for="email">メールアドレス:</label>
  <input type="email" id="email" name="email" required>
  <button type="submit">送信</button>
</form>

○ステップ2:入力チェックのルールを設定する

次に、入力チェックのルールを設定しましょう。HTML5では、様々なバリデーション属性が用意されており、これらを組み合わせることで詳細な検証ルールを作成できます。

上記のメールアドレス例では、type="email"required属性がバリデーションルールとして機能しています。type="email"により自動的にメール形式の検証が行われ、requiredにより入力必須となります。

○ステップ3:エラー表示の実装

バリデーションが失敗した際のエラー表示を実装します。基本的なHTMLバリデーションではブラウザがデフォルトのエラーメッセージを表示しますが、JavaScriptを使用してより詳細な制御も可能です。

document.querySelector("form").addEventListener("submit", function(event) {
  var emailInput = document.getElementById("email");
  if (!emailInput.validity.valid) {
    event.preventDefault();
    
    // カスタムエラー表示(アラートの代わりに画面内表示を推奨)
    var errorDiv = document.getElementById("error-message");
    errorDiv.textContent = emailInput.validationMessage;
    errorDiv.style.display = "block";
  }
});

●実装時の重要な考慮事項

HTMLバリデーションを実装する際に注意すべき点があります。

○ブラウザ間の互換性

HTMLバリデーションは、ブラウザによってサポート状況が異なる場合があります。そのため、複数のブラウザでテストを行い、バリデーションが正しく動作することを確認する必要があります。古いブラウザをサポートする場合は、JavaScriptによるポリフィルの実装も検討してください。

○サーバーサイドでの二重チェック

クライアントサイドのバリデーションは、あくまでユーザーの利便性向上が主目的です。セキュリティ対策として、サーバーサイドでも同様のバリデーションを必ず実装してください。これにより、悪意のあるリクエストや、JavaScriptが無効化された環境からのデータ送信にも対応できます。

●カスタマイズ方法

HTMLバリデーションは、独自のルールやエラーメッセージを設定してカスタマイズできます。

○カスタムバリデーションルールの作成

独自のバリデーションルールを作成するには、pattern属性を使用します。郵便番号の入力フォームに対して、日本の標準形式(123-4567)を受け付けるバリデーションは以下のように設定できます。

<form>
  <label for="postalcode">郵便番号:</label>
  <input type="text" id="postalcode" name="postalcode" pattern="\d{3}-\d{4}" 
         placeholder="123-4567" required>
  <button type="submit">送信</button>
</form>

○エラーメッセージのカスタマイズ

エラーメッセージは、title属性とJavaScriptを組み合わせてカスタマイズできます。以下の例では、郵便番号の入力が不正な場合にカスタムエラーメッセージを表示しています。

<form>
  <label for="postalcode">郵便番号:</label>
  <input type="text" id="postalcode" name="postalcode" pattern="\d{3}-\d{4}" 
         title="郵便番号は123-4567の形式で入力してください" required>
  <button type="submit">送信</button>
</form>

<script>
document.getElementById("postalcode").addEventListener("input", function() {
  // 正しい値が入力された場合、カスタムエラーをクリア
  if (this.validity.valid) {
    this.setCustomValidity("");
  }
});

document.getElementById("postalcode").addEventListener("invalid", function() {
  if (this.validity.patternMismatch) {
    this.setCustomValidity("郵便番号は123-4567の形式で入力してください");
  }
});
</script>

●応用例とサンプルコード

HTMLバリデーションは、様々な入力項目に応用できます。実用的な例を2つ紹介しましょう。

○応用例1:電話番号のバリデーション

日本の電話番号バリデーションでは、携帯電話と固定電話の両方に対応した正規表現を使用します。

<form>
  <label for="phone">電話番号:</label>
  <input type="tel" id="phone" name="phone" 
         pattern="(0\d{1,4}-\d{1,4}-\d{4})|(0\d{9,10})" 
         placeholder="090-1234-5678 または 0312345678"
         title="電話番号を正しい形式で入力してください" required>
  <button type="submit">送信</button>
</form>

○応用例2:パスワード強度のバリデーション

セキュアなパスワードの条件を満たすバリデーションを設定できます。8文字以上で大文字、小文字、数字をそれぞれ最低1つ含む条件は以下のように実装します。

<form>
  <label for="password">パスワード:</label>
  <input type="password" id="password" name="password" 
         pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}" 
         title="8文字以上で、大文字・小文字・数字をそれぞれ1つ以上含む必要があります" 
         required>
  <div id="password-hint">
    パスワードは8文字以上で、大文字・小文字・数字をそれぞれ含めてください
  </div>
  <button type="submit">送信</button>
</form>

●より高度なバリデーション技術

基本的なHTMLバリデーションを超えた、高度な実装方法についても触れておきます。

○リアルタイムバリデーション

ユーザーが入力している最中にリアルタイムでバリデーション結果を表示することで、より良いユーザー体験を提供できます。

<form>
  <label for="username">ユーザー名:</label>
  <input type="text" id="username" name="username" 
         pattern="[a-zA-Z0-9_]{3,20}" required>
  <div id="username-feedback"></div>
  <button type="submit">送信</button>
</form>

<script>
document.getElementById("username").addEventListener("input", function() {
  const feedback = document.getElementById("username-feedback");
  const value = this.value;
  
  if (value.length === 0) {
    feedback.textContent = "";
    feedback.className = "";
  } else if (this.validity.valid) {
    feedback.textContent = "✓ 有効なユーザー名です";
    feedback.className = "valid-feedback";
  } else {
    feedback.textContent = "3-20文字の英数字とアンダースコアのみ使用できます";
    feedback.className = "invalid-feedback";
  }
});
</script>

○複数フィールドの関連チェック

パスワードと確認パスワードのように、複数のフィールド間で整合性をチェックする場合のバリデーション実装例です。

<form>
  <label for="password">パスワード:</label>
  <input type="password" id="password" name="password" required>
  
  <label for="confirm-password">パスワード確認:</label>
  <input type="password" id="confirm-password" name="confirm-password" required>
  
  <button type="submit">送信</button>
</form>

<script>
function validatePasswordMatch() {
  const password = document.getElementById("password");
  const confirmPassword = document.getElementById("confirm-password");
  
  if (password.value !== confirmPassword.value) {
    confirmPassword.setCustomValidity("パスワードが一致しません");
  } else {
    confirmPassword.setCustomValidity("");
  }
}

document.getElementById("password").addEventListener("input", validatePasswordMatch);
document.getElementById("confirm-password").addEventListener("input", validatePasswordMatch);
</script>

まとめ

HTMLバリデーションは、ウェブフォームの品質向上に欠かせない技術です。基本的な属性の設定から始まり、正規表現やJavaScriptを活用することで、より複雑で実用的なバリデーションシステムを構築できます。

ただし、クライアントサイドのバリデーションだけでなく、サーバーサイドでの検証も必ず併用してください。また、ユーザビリティを考慮し、分かりやすいエラーメッセージと適切なフィードバックを提供することで、使いやすいフォームを作成できるでしょう。

これらの知識を活用して、ユーザーにとって使いやすく、開発者にとって保守しやすいフォームシステムの構築を目指してください。