はじめに
ウェブフォームを利用すると、ユーザーからのデータを収集できます。しかし、入力ミスや不正なデータが送信されることもあります。そこで活躍するのがバリデーション(入力検証)です。本記事では、HTMLのバリデーション機能を活用して、ユーザーの入力エラーを防ぐ方法を解説します。
HTMLのバリデーションとは?
バリデーションとは、フォームの入力データが適切であるかをチェックする仕組みです。バリデーションには、クライアントサイド(HTML・JavaScript)とサーバーサイド(PHPなど)の2種類があります。
- クライアントサイドバリデーション(HTMLやJavaScriptで実装)
- 送信前にエラーをユーザーに通知できる
- サーバーの負荷を減らせる
- ただし、JavaScriptを無効にされた場合には機能しない
- サーバーサイドバリデーション(PHPやNode.jsなどで実装)
- より強固なデータ検証が可能
- クライアントサイドのバリデーションを回避されても対応できる
安全性を高めるために、クライアントサイドとサーバーサイドの両方でバリデーションを実装するのがベストです。
HTMLの標準バリデーション機能
HTML5では、入力バリデーション用の属性を使うだけで、簡単にフォームのチェックができます。
1. 必須入力チェック (required)
required属性を追加すると、入力が必須になります。
<input type="text" name="username" required>→ ユーザーが何も入力せずに送信しようとすると、エラーメッセージが表示されます。
2. 最小・最大文字数 (minlength / maxlength)
文字数の制限を設定できます。
<input type="text" name="username" minlength="3" maxlength="15" required>→ 3文字未満または15文字を超えるとエラーになります。
3. 数値の範囲 (min / max / step)
数値入力の範囲を指定できます。
<input type="number" name="age" min="18" max="99" step="1" required>→ 18未満または99を超えるとエラーになります。
4. メールアドレスの形式チェック (type="email")
メールアドレスの形式が正しいかをチェックします。
<input type="email" name="email" required>→ user@example.comのような形式でないとエラーになります。
5. パターン(正規表現)チェック (pattern)
pattern属性を使うと、正規表現を使って細かいルールを設定できます。
<input type="text" name="zipcode" pattern="[0-9]{3}-[0-9]{4}" required>→ 123-4567のような郵便番号の形式のみ許可されます。
6. パスワードの条件設定
例えば、8文字以上・英数字を含むパスワードをチェックするには以下のようにします。
<input type="password" name="password" pattern="(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}" required>バリデーションエラーメッセージのカスタマイズ
デフォルトのエラーメッセージはブラウザ依存ですが、title属性を追加すると独自のメッセージを表示できます。
<input type="text" name="username" minlength="3" title="3文字以上入力してください" required>JavaScriptを使ったカスタムバリデーション
HTMLのバリデーションだけでは対応できない場合、JavaScriptを使ってチェックを強化できます。
1. setCustomValidity()でカスタムエラーメッセージを設定
以下の例では、ユーザー名が5文字未満の場合にカスタムメッセージを表示します。
<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でのサーバーサイドバリデーション(メールアドレスのチェック)
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
echo "無効なメールアドレスです";
}まとめ
- HTMLの標準バリデーションを使えば、簡単に入力エラーを防げる
required、pattern、typeなどの属性を活用する- JavaScriptの
setCustomValidity()でカスタムエラーメッセージを設定できる - サーバーサイドのバリデーションも必ず実装する
フォームのバリデーションを適切に設定して、ユーザーにとって使いやすく、かつ安全な入力フォームを作成しましょう!
最後まで読んでいただきありがとうございます!
このブログは初心者向けwebデザイナー向けにHTML、CSSの基礎知識を発信しています。
この記事を読んだ方に少しでもお役に立てれば幸いです。
