HTML5で入力項目をValidation(検証)する方法
Contents
HTML5で入力項目をValidation(検証)する方法
サンプル
HTMLコード
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>HTML5 Validation demo(1)</title>
<style type="text/css">
textarea:invalid+span:after
,input:invalid+span:after {
position: absolute;
content: '✖';
padding-left: 5px;
}
textarea:valid+span:after
,input:valid+span:after {
position: absolute;
content: '✓';
padding-left: 5px;
}
textarea:invalid,input:invalid {
border: red solid 3px;
}
</style>
</head>
<body>
<form id="myForm" method="get" action="#">
<fieldset>
<legend>入力項目チェック</legend>
<p>
<label for="fullname">名前 (入力必須, 2文字以上入力してください)</label>
<input id="fullname" name="fullname" minlength="2" type="text" required /><span></span>
</p>
<p>
<label for="alphabet">ローマ字 (入力必須, 3文字以上入力してください)</label>
<input id="alphabet" name="alphabet" minlength="3" type="text" pattern="[0-9 A-Za-z]+$" required /><span></span>
</p>
<p>
<span>性別 (選択必須)</span>
<input id="male" name="gender" type="radio" required /><label for="male">男</label>
<input id="female" name="gender" type="radio" required /><label for="female">女</label>
</p>
<p>
<span>規約 (選択必須)</span>
<input id="agree" name="agree" type="checkbox" required /><label for="agree">同意する</label>
</p>
<p>
<span>生年月日 (選択必須)</span>
<input id="birthday" name="birthday" type="date" min="1950-01-31" required /><span></span>
</p>
<p>
<span>利用開始年月 (選択必須)</span>
<input id="startmonth" name="startmonth" type="month" min="2022-06" max="2022-11" required /><span></span>
</p>
<p>
<span>登録日時 (選択必須)</span>
<input id="registrationtime" name="registrationtime" max="2022-12-31T12:30" type="datetime-local" required /><span></span>
</p>
<p>
<label for="email">E-mail (入力必須)</label>
<input id="email" type="email" name="email" required><span></span>
</p>
<p>
<label for="homepage">URL (入力任意)</label>
<input id="homepage" type="url" name="homepage"><span></span>
</p>
<p>
<label for="height">身長(cm) (入力必須)</label>
<input id="height" type="number" name="height" step="0.1" min="50" max="250" required><span></span>
</p>
<p>
<label for="comment">コメント (入力必須)</label>
<textarea id="comment" name="comment" required></textarea><span></span>
</p>
<p>
<input class="submit" type="submit" value="送信">
</p>
</fieldset>
</form>
<script type="text/javascript">
var form = document.querySelector("#myForm");
form.addEventListener("submit", function(){
alert('チェックOK');
})
</script>
</body>
</html>
デモ
入力チェック(Validation:検証)をHTML5で実装する方法
インプットチェックはJavascriptでがっちり実装するものだと思うかもしれませんが、HTMLだけでそこそこチェックできます。実装方法を紹介します。
必須チェック
Inputタグに『required』属性を設定すれば、項目を必須とすることができます。
<input type="text" required>
入力、または、選択されていない場合には、エラーメッセージが表示されるようになります。
このメッセージはブラウザで表示されるもので、ブラウザによって表示されるメッセージは異なります。当然、ご使用のブラウザの言語によっても、表示される言語が変わります。
文字数チェック
属性『minlength』と『maxlength』を設定することで、最小文字数と最大文字数を制御できます。
<input type="text" minlength="2" maxlength="10" required />
maxlengthを超えて入力できないので、エラーメッセージは表示されませんが、minlength未満の場合は、エラーメッセージが表示されます。
文字種チェック
テキストボックスに入力可能な文字種類も制御できます。
制御するには属性「pattern」を指定し、正規表現で入力可能文字列を定義できます。
例えば、英字小文字で4~8文字以内で入力させたい場合には以下のようになります。
<input type="text" pattern="[a-z]{4,8}" required />
パターンに合わなければエラーメッセージが表示されます。
数値のみに入力を限定する
inputのtypeに『number』とすれば、入力を数値のみに限定できます。
最大値を設定
最大値を設定するには属性「max」を指定してください。
最小値を設定する
最小値を設定するには属性「min」を指定してください。
小数値を入力可能にさせる
type「number」の場合、デフォルトでは小数値を設定できません。入力可能にさせるには「step」(増分値)を小数第1位にするには「0.1」としてください。
<input type="text" step="0.1" min="50" max="250" />
メールアドレスチェック
inputのtypeに『email』とすれば、入力文字形式をメールアドレス形式であるかどうかをチェックしてくれます。
実際のチェックは、英数字で、かつ、アットマークが含まれていて、適切な位置にあるかをチェックしています。また記号があればNGとなっています。
チェックNGの場合にはエラーメッセージが表示されます。
URLチェック
inputのtypeに『url』とすれば、入力文字形式をURL形式であるかどうかをチェックしてくれます。
先頭に「http://」や「https://」がなければ、NGとなります。
検証結果に合わせてスタイルを変更するには?
スタイルシートを利用すれば、検証結果にあわせて、色を変えたり、文字を変えたりすることができます。
スタイルシートのサンプル
スタイルシート
まず、以下のようなスタイルシートを準備してください。
『:invalid』は検証結果NGの場合に適用されるプロパティです。
『:valid』は検証結果OKの場合に適用されるプロパティです。
<style type="text/css">
textarea:invalid+span:after
,input:invalid+span:after {
position: absolute;
content: '✖';
padding-left: 5px;
}
textarea:valid+span:after
,input:valid+span:after {
position: absolute;
content: '✓';
padding-left: 5px;
}
textarea:invalid,input:invalid {
border: red solid 3px;
}
</style>
HTMLマークアップ
次にinputタグの次に「span」タグに設定することで検証結果を反映できます。
<input type="text" required /><span></span>
ご参考
関連ページ