--- title: 制約検証 slug: Web/Guide/HTML/Constraint_validation tags: - CSS - Guide - HTML5 - NeedsContent - Selectors translation_of: Web/Guide/HTML/Constraint_validation original_slug: Web/Guide/HTML/HTML5/Constraint_validation --- ウェブフォームの作成は常に複雑な作業でした。フォーム自体をマークアップすること自体は簡単ですが、それぞれの入力欄が妥当で一貫しているかどうかをチェックすることはもっと難しく、問題をユーザーに伝えることは頭痛がするかもしれません。[HTML5](/ja/docs/Glossary/HTML5) では、フォームに新しい仕組みが導入されました。 {{ HTMLElement("input") }} 要素に意味を持つ新しい型と、クライアント側でフォームの内容をチェックする作業を簡単にする*制約検証*が追加されました。基本的な、よくある制約は、JavaScript を必要とせずに、新しい属性を設定することでチェックできます。もっと複雑な制約は[制約検証 API](/ja/docs/Web/API/Constraint_validation) を使用して検査することができます。 これらの概念の基本的な入門 (サンプル付き) は、[フォーム検証チュートリアル](/ja/docs/Learn/Forms/Form_validation)をご覧ください。 > **Note:** HTML5 の制約検証は、*サーバー側*での検証の必要性をなくす訳ではありません。不正なフォームのリクエストは減少すると思われますが、不正なリクエストはまだ互換性のないブラウザー(例えば、HTML5 や JavaScript に対応していないブラウザー)から送られたり、ウェブアプリケーションをだまそうとする悪意のある人から送られたりする可能性があります。従って、HTML4 の時と同様、クライアント側で行われている検証と一貫性のある方法で、サーバー側でも入力の制約を検証する必要があります。 ## 組み込みの基本的な制約 HTML5 では、基本的な制約は 2 通りの方法で定義されます。 - {{ HTMLElement("input") }} 要素の {{ htmlattrxref("type", "input") }} 属性に意味的に最も適切な値を選択する。例えば `email` を選択することで、値が妥当なメールアドレスであるかどうかをチェックする制約が自動的に作成されます。 - 検証関連属性を設定することで、基本的な制約を簡単な方法で、JavaScript の必要なく記述できます。 ### 意味を持つ入力型 {{ htmlattrxref("type", "input") }} 属性の組込み制約は次の通りです。 | 入力型 | 制約の説明 | 関連付けられた違反 | | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | | [``](/ja/docs/Web/HTML/Element/input/url) | 値は絶対 [URL](/ja/docs/Learn/Common_questions/What_is_a_URL) であり、 [URL Living Standard](https://url.spec.whatwg.org/) で定義された通りでなければなりません。 | **[TypeMismatch](/ja/docs/Web/API/ValidityState/typeMismatch)** 制約違反 | | [``](/ja/docs/Web/HTML/Element/input/email) | 値は統語的に妥当なメールアドレスで、ふつうは `username@hostname.tld` の書式でなければなりません。 | **[TypeMismatch](/ja/docs/Web/API/ValidityState/typeMismatch)** 制約違反 | これらの入力型のどちらでも、{{ htmlattrxref("multiple", "input") }} 属性が設定されていたら、この入力欄にカンマ区切りのリストで複数の値を設定することができます。これらの中でここで書かれた条件に満足しないものがある場合、 **Type mismatch** 制約違反が発生します。 なお、ほとんどの入力型には内部的な制約がありません。制約検証が禁止されているものや、不正な値を正しい既定値に変換する無害化アルゴリズムがあるものがあるためです。 ### 検証関連属性 上記で述べた `type` 属性に加えて、下記の要素が基本的な制約を記述するのに使われます。
属性 | 属性をサポートする入力型 | とりうる値 | 制約の説明 | 関連する違反 |
---|---|---|---|---|
pattern
|
text , search , url ,
tel , email , password
|
JavaScript 正規表現
(ECMAScript 5 で global , ignoreCase , multiline フラグが無効でコンパイルされたもの)
|
値がパターンに一致する必要がある。 |
patternMismatch
制約違反
|
min
|
range , number |
有効な数値 | 値がその値以上であること。 |
rangeUnderflow
制約違反
|
date , month , week |
有効な日付 | |||
datetime , datetime-local , time
|
有効な日付と時刻 | |||
max
|
range , number |
有効な数値 | 値がその値以下であること。 |
rangeOverflow
制約違反
|
date , month , week |
有効な日付 | |||
datetime , datetime-local , time
|
有効な日付と時刻 | |||
required
|
text , search , url ,
tel , email , password ,
date , datetime , datetime-local ,
month , week , time ,
number , checkbox , radio ,
file および {{ HTMLElement("select") }} と {{ HTMLElement("textarea") }} 要素にも
|
なし。論理属性のため、存在すれば true、存在しなければ false を意味する。 | 値は必須 (設定された場合)。 |
valueMissing
制約違反
|
step
|
date |
日の整数値 |
step がリテラル値 any 以外に設定されていた場合、値は min + step の整数倍である必要がある。
|
stepMismatch
制約違反
|
month |
月の整数値 | |||
week |
週の整数値 | |||
datetime , datetime-local , time
|
秒の整数値 | |||
range , number |
整数値 | |||
minlength
|
text , search , url ,
tel , email , password と
{{ HTMLElement("textarea") }} 要素
|
整数長 | 空でない場合、文字数 (コードポイント数) は属性値より少なくなってはならない。 {{ HTMLElement("textarea") }} では、改行はすべて (CRLF の組ではなく) 1 文字に正規化される。 |
tooShort
制約違反
|
maxlength
|
text , search , url ,
tel , email , password と
{{ HTMLElement("textarea") }} 要素
|
整数長 | 文字数 (コードポイント数) が属性値を超えてはいけない。 |
tooLong
制約違反
|