From 61a4e6c405d5f92d79b8c96c629938186537f802 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Tue, 8 Feb 2022 00:28:46 +0900 Subject: 2021/11/23 時点の英語版に同期 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- files/ja/web/html/element/input/number/index.html | 524 +++++++++++----------- 1 file changed, 250 insertions(+), 274 deletions(-) (limited to 'files/ja') diff --git a/files/ja/web/html/element/input/number/index.html b/files/ja/web/html/element/input/number/index.html index 785cb42be9..2f19f90b0a 100644 --- a/files/ja/web/html/element/input/number/index.html +++ b/files/ja/web/html/element/input/number/index.html @@ -2,272 +2,266 @@ title: slug: Web/HTML/Element/input/number tags: - - Element - - Forms + - 要素 + - フォーム - HTML - - HTML forms + - HTML フォーム - Input - - Input Element - - Input Type + - 入力要素 + - 入力型 - Number - - Reference + - リファレンス +browser-compat: html.elements.input.input-number translation_of: Web/HTML/Element/input/number --- -
{{HTMLRef("Input_types")}}
-

{{HTMLElement("input")}} 要素の number 型は、ユーザーに数値を入力させるために使用されます。数値以外の入力を除外するための値検証機能を内蔵しています。ブラウザーによっては、マウスや指先のタップを使用して値をユーザーが値を増減させるための矢印を提供していることもあります。

+{{HTMLRef("Input_types")}} -
{{EmbedInteractiveExample("pages/tabbed/input-number.html", "tabbed-shorter")}}
+{{HTMLElement("input")}} 要素の **`number`** 型は、ユーザーに数値を入力させるために使用されます。数値以外の入力を除外するための値検証機能を内蔵しています。 - +ブラウザーによっては、マウスや指先のタップを使用して、値をユーザーが値を増減させるための矢印を提供していることもあります。 -

number 型に対応していないブラウザーでは、 number 入力欄は text 入力欄で代替されます。

+{{EmbedInteractiveExample("pages/tabbed/input-number.html", "tabbed-shorter")}} + +`number` 型に対応していないブラウザーでは、 `number` 入力欄は `text` 入力欄で代替されます。 - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + +
{{anch("Value", "値")}}数字を表す {{jsxref("Number")}}、または空欄
イベント{{domxref("HTMLElement/change_event", "change")}} および {{domxref("HTMLElement/input_event", "input")}}
対応している共通属性{{htmlattrxref("autocomplete", "input")}}, {{htmlattrxref("list", "input")}}, {{htmlattrxref("placeholder", "input")}}, {{htmlattrxref("readonly", "input")}}
IDL 属性list, value, valueAsNumber
メソッド{{domxref("HTMLInputElement.select", "select()")}}, {{domxref("HTMLInputElement.stepUp", "stepUp()")}}, {{domxref("HTMLInputElement.stepDown", "stepDown()")}}
{{anch("値")}}数字を表す {{jsxref("Number")}}、または空欄
イベント + {{domxref("HTMLElement/change_event", "change")}} および + {{domxref("HTMLElement/input_event", "input")}} +
対応している共通属性 + {{htmlattrxref("autocomplete", "input")}}, + {{htmlattrxref("list", "input")}}, + {{htmlattrxref("placeholder", "input")}}, + {{htmlattrxref("readonly", "input")}} +
IDL 属性list, value, valueAsNumber
メソッド + {{domxref("HTMLInputElement.select", "select()")}}, + {{domxref("HTMLInputElement.stepUp", "stepUp()")}}, + {{domxref("HTMLInputElement.stepDown", "stepDown()")}} +
-

- -

入力欄に入力された数字の値を表す {{jsxref("Number")}} です。 {{htmlattrxref("value", "input")}} 属性に数値を設定することで、次のように入力欄の既定値を設定することができます。

- -
<input id="number" type="number" value="42">
- -

{{EmbedLiveSample('Value', 600, 40)}}

- -

追加の属性

- -

すべての {{HTMLElement("input")}} 型で共通する属性に加え、 number 型の入力欄は次の属性にも対応しています。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
属性説明
{{anch("list")}}任意の定義済み自動補完の選択肢を保持する {{HTMLElement("datalist")}} 要素の id です。
{{anch("max")}}この入力欄で受け付ける最大値
{{anch("min")}}この入力欄で受け付ける最小値
{{anch("placeholder")}}入力欄の中が空の時に表示される入力例の値
{{anch("readonly")}}論理値で、値が読み取り専用であるかを示す
{{anch("step")}}上下の矢印で値を調整する時や、検証に使用する刻み値
+## 値 -

{{page("/ja/docs/Web/HTML/Element/input/text", "list", 0, 1, 2)}}

+入力欄に入力された数字の値を表す数値です。 {{htmlattrxref("value", "input")}} 属性に数値を設定することで、次のように入力欄の既定値を設定することができます。 -

{{htmlattrdef("max")}}

+```html + +``` -

この入力欄が受け付ける最大値です。要素に入力された {{htmlattrxref("value", "input")}} がこれを超えた場合、要素は制約検証に失敗します。 max 属性の値が数値でない場合、要素は最大値を持ちません。

+{{EmbedLiveSample('Value', 600, 40)}} -

この値は min 属性の値より大きいか、等しくしなければなりません。

+## 追加の属性 -

{{htmlattrdef("min")}}

+すべての {{HTMLElement("input")}} 型で共通する属性に加え、 `number` 型の入力欄は次の属性にも対応しています。 -

この入力欄が受け付ける最小値です。要素の {{htmlattrxref("value", "input")}} がこれより小さい場合、要素は制約検証に失敗します。 min 属性の値が数値でない場合、要素は最小値を持ちません。

+### list -

この値は max 属性の値より小さいか、等しくしなければなりません。

+list 属性の値は、同じ文書内にある {{HTMLElement("datalist")}} 要素の {{domxref("Element.id", "id")}} です。 {{HTMLElement("datalist")}} は、この入力欄でユーザーに提案するための事前定義された値のリストを提供します。リストの中の値のうち、この {{htmlattrxref("type", "input")}} と互換性のないものは、提案されるオプションには含まれません。提供される値は提案であり、要件ではありません。ユーザーはこの定義済みリストから選択することも、異なる値を提供することもできます。 -

{{page("/ja/docs/Web/HTML/Element/input/text", "placeholder", 0, 1, 2)}}

+### max -

{{page("/ja/docs/Web/HTML/Element/input/text", "readonly", 0, 1, 2)}}

+この入力欄が受け付ける最大値です。要素に入力された {{htmlattrxref("value", "input")}} がこれを超えた場合、要素は[制約検証](/ja/docs/Web/Guide/HTML/Constraint_validation)に失敗します。 `max` 属性の値が数値でない場合、要素は最大値を持ちません。 -

{{htmlattrdef("step")}}

+この値は `min` 属性の値より大きいか、等しくしなければなりません。 -
-

step 属性は値が吸着する粒度を指定する数値、または後述する特殊な値 any です。刻みの基準値に等しい値 (指定されていれば {{anch("min")}}、そうでなければ {{htmlattrxref("value", "input")}}、どちらも設定されていなければ適切な既定値) のみが妥当となります。

+### min -

文字列値の any は刻みがなく、どの値でも許可されることを意味します ({{anch("min")}}{{anch("max")}} など、他の制約に制限されます)。

+この入力欄が受け付ける最小値です。要素の {{htmlattrxref("value", "input")}} がこれより小さい場合、要素は[制約検証](/ja/docs/Web/Guide/HTML/Constraint_validation)に失敗します。 `min` 属性の値が数値でない場合、要素は最小値を持ちません。 -
-

注: ユーザーがデータを入力したときには刻みの設定には吸着せず、{{Glossary("user agent", "ユーザーエージェント")}}は直近の妥当な値、同じ距離の値の選択肢が二つあった場合は、正の方向の推奨値に丸められます。

-
-
+この値は `max` 属性の値より小さいか、等しくしなければなりません。 -

number 入力欄の既定の刻み値は 1 であり、刻みの基準値が整数ではない場合を除いて、整数の入力のみを許可します。

+### placeholder -

number 入力欄の使用

+`placeholder` 属性は文字列で、その欄にどのような種類の情報が期待されているかについてのユーザーに対する短いヒントを提供します。これは期待されているデータの種類を紹介する一語または短い句であり、説明的なメッセージではありません。テキストには改行を含めることはできません。 -

<input type="number"> 要素は、フォームに数値を入力するユーザーインターフェイスとロジックを構築する際に、作業を簡略化するのに役立ちます。 type の値に正しく number を設定して数値入力を作成すると、入力された文字列が数値かどうかが自動的に検証されるようになり、通常は値を1つずつ上下するための上下ボタンの組み合わせが表示されます。

+コントロールの内容がある書字方向 ({{Glossary("LTR")}} または {{Glossary("RTL")}}) であるものの、プレイスホルダーを逆の方向に表示する必要がある場合、 Unicode 双方向アルゴリズム書式文字を使用してプレイスホルダーの中で書字方向を上書きすることができます。詳しくは、[双方向テキストでの Unicode コードの使い方(英語)](https://www.w3.org/International/questions/qa-bidi-unicode-controls)を参照してください。 -
-

重要: 論理的には、数値入力欄の中に数字以外を入力することはできないはずです。これらは、ブラウザー間でこれに関するいくつかの意見の相違があるようです。 {{bug(1398528)}} を参照してください。

-
+> **Note:** 可能であれば `placeholder` を使用することは避けてください。フォームを説明する他の方法ほど意味論的に有益ではなく、コンテンツに予期しない技術的な問題を引き起こす可能性があります。詳しくは、[\: 入力欄 (フォーム入力) 要素](/ja/docs/Web/HTML/Element/input)の[プレイスホルダーはアクセシブルではない](/ja/docs/Web/HTML/Element/input#プレイスホルダーはアクセシブルではない)を参照してください。 -
-

: ユーザーが HTML をその場面の裏でいじることができることを意識しておくことは極めて重要です。ですから、安全を目的として、サイトでクライアント側の値検証機能のみを使用してはいけません。何らかのセキュリティ上の問題を含む可能性がある値が提供されるトランザクションの場合は、いずれもサーバー側で値検証を行う必要があります

-
+### readonly -

モバイルブラウザーでは、ユーザーが値を入力しようとした時に、数値入力に適した特別なキーボードを表示することで、使い勝手をさらに向上させます。次のスクリーンショットは、 Android の Firefox で撮影されたものです。

+論理属性で、存在すれば、ユーザーが編集することができないことを表します。しかし、 `value` は、 JavaScript コードから直接 {{domxref("HTMLInputElement")}} の `value` プロパティを設定することで変更することができます。 -

+> **Note:** 読み取り専用フィールドは値を持てないため、 `required` は `readonly` 属性も指定されている入力欄には効果がありません。 -

単純な数値入力

+### step -

最も基本的なフォームでは、次のように数値入力を実装することができます。

+`step` 属性は値が吸着する粒度を指定する数値、または後述する特殊な値 `any` です。刻みの基準値に等しい値(指定されていれば `{{anch("min")}}`、そうでなければ {{htmlattrxref("value", "input")}}、どちらも設定されていなければ適切な既定値)のみが妥当となります。 -
<label for="ticketNum">購入するチケットの枚数:</label>
-<input id="ticketNum" type="number" name="ticketNum" value="0">
+文字列値の `any` は、刻みがなく、どの値でも許可されることを意味します(`{{anch("min")}}` や `{{anch("max")}}` など、他の制約には制限されます)。 -

{{EmbedLiveSample('A_simple_number_input', 600, 40)}}

+> **Note:** ユーザーがデータを入力したときには刻みの設定には吸着せず、{{Glossary("user agent", "ユーザーエージェント")}}は直近の妥当な値、同じ距離の値の選択肢が 2 つあった場合は、正の方向の推奨値に丸められます。 -

数値入力は空の場合と単一の数値が入力された場合に妥当とみなされますが、それ以下は無効とみなされます。 {{htmlattrxref("required", "input")}} 属性が使用された場合は、入力欄が空の場合に妥当とみなされなくなります。

+`number` 入力欄の既定の刻み値は `1` であり、刻みの基準値が整数ではない場合を*除いて*、整数の入力のみを許可します。 -
-

: 有効な浮動小数点数を受け入れることができます (つまり、 NaN でも Infinity でもないもの)。

-
+## number 入力欄の使用 -

プレイスホルダー

+`` 要素は、フォームに数値を入力するユーザーインターフェイスとロジックを構築する際に、作業を簡略化するのに役立ちます。 `type` の値に正しく `number` を設定して数値入力を作成すると、入力された文字列が数値かどうかが自動的に検証されるようになり、通常は値を 1 つずつ上下するための上下ボタンの組み合わせが表示されます。 -

フォームがどのような入力データを取るのかについての行内のヒントを提供すると、有益なことがあります。これはページのデザインでそれぞれの {{HTMLElement("input")}} に説明のラベルを付けることができない場合に特に重要になります。ここでプレイスホルダーが登場します。プレイスホルダーはほとんどの場合、入力される value が取るべき値の形式のヒントを説明するために使用される値です。これは value"" の時に入力欄の中に表示されます。入力欄にデータが入力されると、プレイスホルダーは非表示になり、入力欄が空欄になると、プレイスホルダーは再度表示されます。

+> **Warning:** 論理的には、数値入力欄の中に数字以外を入力することはできないはずです。これらは、ブラウザー間でこれに関するいくつかの意見の相違があるようです。 {{bug(1398528)}} を参照してください。 -

ここで、 number 入力欄に "10の倍数" というプレイスホルダーを設定します。なお、プレイスホルダーが非表示になったり再表示されたりするのは、入力欄の中身を変更したときです。

+> **Note:** ユーザーが HTML をその場面の裏でいじることができることを意識しておくことは極めて重要です。ですから、安全を目的として、サイトでクライアント側の値検証機能のみを使用してはいけません。何らかのセキュリティ上の問題を含む可能性がある値が提供されるトランザクションの場合は、いずれもサーバー側で値検証を行う必要があります。 -
<input type="number" placeholder="10の倍数">
+モバイルブラウザーでは、ユーザーが値を入力しようとした時に、数値入力に適した特別なキーボードを表示することで、使い勝手をさらに向上させます。 -

{{EmbedLiveSample('Placeholders', 600, 40)}}

+### 単純な数値入力 -

刻み幅の制御

+最も基本的なフォームでは、次のように数値入力を実装することができます。 -

既定で、数値を増減させるための増減ボタンは、1刻みで値を増減させます。 {{htmlattrxref("step", "input")}} 属性を設定することで、刻みの量を指定する数値の値を変更できます。上記の例は10の倍数を指定すると言っていますので、 step の値を 10 にすることが妥当でしょう。

+```html + + +``` -
<input type="number" placeholder="multiple of 10" step="10">
+{{EmbedLiveSample('A_simple_number_input', 600, 40)}} -

{{EmbedLiveSample('Controlling_step_size', 600, 40)}}

+数値入力は空の場合と単一の数値が入力された場合に妥当とみなされますが、それ以下は無効とみなされます。 {{htmlattrxref("required", "input")}} 属性が使用された場合は、入力欄が空の場合に妥当とみなされなくなります。 -

この例で、増減ボタンが値を1ずつではなく10ずつ増減させることが分かるでしょう。手動で10の倍数ではない数値を入力することができますが、無効な値とみなされるでしょう。

+> **Note:** [有効な浮動小数点数](https://html.spec.whatwg.org/multipage/infrastructure.html#valid-floating-point-number)を受け入れることができます(つまり、 [NaN](/ja/docs/Web/JavaScript/Reference/Global_Objects/NaN) でも [Infinity](/ja/docs/Web/JavaScript/Reference/Global_Objects/Infinity) でもないもの)。 -

最小値と最大値の指定

+### プレイスホルダー -

{{htmlattrxref("min", "input")}} 及び {{htmlattrxref("max", "input")}} 属性を使用して、入力欄が保持できる最小値と最大値を指定することができます。例えば、最小値を 0 に、最大値を 100 に設定する例をご紹介しましょう。

+フォームがどのような入力データを取るのかについての行内のヒントを提供すると、有益なことがあります。これはページのデザインでそれぞれの {{HTMLElement("input")}} に説明のラベルを付けることができない場合に特に重要になります。ここで**プレイスホルダー**ガ登場します。プレイスホルダーはほとんどの場合、入力される `value` が取るべき値の形式のヒントを説明するために使用される値です。これは `value` が `""` の時に入力欄の中に表示されます。入力欄にデータが入力されると、プレイスホルダーは非表示になり、入力欄が空欄になると、プレイスホルダーは再度表示されます。 -
<input type="number" placeholder="multiple of 10" step="10" min="0" max="100">
+ここで、 `number` 入力欄に "`10 の倍数`" というプレイスホルダーを設定します。なお、プレイスホルダーが非表示になったり再表示されたりするのは、入力欄の中身を変更したときです。 -

{{EmbedLiveSample('Specifying_minimum_and_maximum_values', 600, 40)}}

+```html + +``` -

更新したこの版では、増減ボタンで0未満や100より大きい数値を設定することができないことにお気づきでしょう。手動でこの範囲の外の値を入力することもできますが、無効な値とみなされるでしょう。

+{{EmbedLiveSample('Placeholders', 600, 40)}} -

小数が使用できるようにする

+### 刻み幅の制御 -

数値入力の問題の一つが、既定で刻みが1になっていることです。小数を含む数値 (たとえば "1.0") を入力しようとすると、無効な値とみなされるでしょう。小数が必要な値を入力させたい場合は、これを step の値に反映させる必要があります(例えば step="0.01" で小数第2位まで許可します)。単純な例を示します。

+既定で、数値を増減させるための増減ボタンは、 1 刻みで値を増減させます。 {{htmlattrxref("step", "input")}} 属性を設定することで、刻みの量を指定する数値の値を変更できます。上記の例は10の倍数を指定すると言っていますので、 `step` の値を `10` にすることが妥当でしょう。 -
<input type="number" placeholder="1.0" step="0.01" min="0" max="10">
+```html + +``` -

{{EmbedLiveSample("Allowing_decimal_values", 600, 40)}}

+{{EmbedLiveSample('Controlling_step_size', 600, 40)}} -

この例では 0.0 から 10.0 までで、小数第2位までの値が許容されます。この例では "9.52" は妥当になりますが、 "9.521" は妥当ではありません。

+この例で、増減ボタンが値を 1 ずつではなく 10 ずつ増減させることが分かるでしょう。手動で 10 の倍数ではない数値を入力することができますが、無効な値とみなされるでしょう。 -

入力欄の寸法の制御

+### 最小値と最大値の指定 -

number 型の {{HTMLElement("input")}} 要素では、 {{htmlattrxref("size", "input")}} のような寸法を決める属性には対応していません。入力欄の寸法を変更するには CSS に頼る必要があります。

+{{htmlattrxref("min", "input")}} オヨビ {{htmlattrxref("max", "input")}} 属性を使用して、入力欄が保持できる最小値と最大値を指定することができます。例えば、最小値を `0` に、最大値を `100` に設定する例をご紹介しましょう。 -

例えば、入力欄の幅を数字3桁の入力に必要なだけの幅に調整するには、 HTML に {{htmlattrxref("id")}} を設定し、これから入力欄を短くしたときに文字列が表示できなくならないように、プレイスホルダーを短縮します。

+```html + +``` -
<input type="number" placeholder="x10" step="10" min="0" max="100" id="number">
+{{EmbedLiveSample('Specifying_minimum_and_maximum_values', 600, 40)}} -

それから、要素の id#number である要素の幅を短くします。

+更新したこの版では、増減ボタンで 0 未満や 100 より大きい数値を設定することができないことにお気づきでしょう。手動でこの範囲の外の値を入力することもできますが、無効な値とみなされるでしょう。 -
#number {
-  width: 3em;
-}
+### 小数が使用できるようにする + +数値入力の問題の一つが、既定で刻みが 1 になっていることです。小数を含む数値(たとえば "1.0")を入力しようとすると、無効な値とみなされるでしょう。小数が必要な値を入力させたい場合は、これを `step` の値に反映させる必要があります(例えば `step="0.01"` で小数第 2 位まで許可します)。単純な例を示します。 + +```html + +``` + +{{EmbedLiveSample("Allowing_decimal_values", 600, 40)}} + +この例では `0.0` から `10.0` までで、小数第 2 位までの値が許容されます。この例では "9.52" は妥当になりますが、 "9.521" は妥当ではありません。 + +### 入力欄の寸法の制御 + +{{HTMLElement("input")}} 要素で type が `number` の場合、 {{htmlattrxref("size", "input")}} のような寸法を決める属性には対応していません。入力欄の寸法を変更するには [CSS](/ja/docs/Web/CSS) に頼る必要があります。 + +例えば、入力欄の幅を数字 3 桁の入力に必要なだけの幅に調整するには、 HTML に {{htmlattrxref("id")}} を設定し、これから入力欄を短くしたときに文字列が表示できなくならないように、プレイスホルダーを短縮します。 + +```html + +``` + +それから、要素の `id` が `#number` である要素の幅を短くします。 -

結果は以下のように表示されます。

+```css +#number { + width: 3em; +} +``` -

{{EmbedLiveSample('Controlling_input_size', 600, 40)}}

+結果は以下のように表示されます。 -

サジェスト値の提供

+{{EmbedLiveSample('Controlling_input_size', 600, 40)}} -

{{htmlattrxref("list", "input")}} 属性に、サジェスト値あたり一つの {{HTMLElement("option")}} 要素を含んだ {{HTMLElement("datalist")}} の {{htmlattrxref("id")}} を値として入れることにより、ユーザーの選択することができる既定の選択肢のリストを提供することができます。それぞれの optionvalue は、数値入力ボックスのサジェスト値に関係します。

+### サジェスト値の提供 -
<input id="ticketNum" type="number" name="ticketNum" list="defaultNumbers">
-<span class="validity"></span>
+{{htmlattrxref("list", "input")}} 属性に、サジェスト値あたり一つの {{HTMLElement("option")}} 要素を含んだ {{HTMLElement("datalist")}} の {{htmlattrxref("id")}} を値として入れることにより、ユーザーの選択することができる既定の選択肢のリストを提供することができます。それぞれの `option` の `value` は、数値入力ボックスのサジェスト値に関係します。
 
-<datalist id="defaultNumbers">
-  <option value="10045678">
-  <option value="103421">
-  <option value="11111111">
-  <option value="12345678">
-  <option value="12999922">
-</datalist>
+```html + + -

{{EmbedLiveSample("Offering_suggested_values", 600, 40)}}

+ + +``` -
-

number 入力欄での {{htmlattrxref("list", "input")}} 属性の使用はすべてのブラウザーで対応しているわけではありません。例えば Chrome や Opera では動作しますが、 Firefox では動作しません。

-
+{{EmbedLiveSample("Offering_suggested_values", 600, 40)}} -

検証

+## 検証< -

すでに number 入力欄における幾つかの検証機能については言及しましたが、ここで確認してみましょう。

+すでに `number` 入力欄における幾つかの検証機能については言及しましたが、ここで確認してみましょう。 - +- `` 要素は、数値(または `required` が指定されていない場合は空欄)ではない入力を自動的に違反とします。 +- {{htmlattrxref("required", "input")}} 属性を使用すると、空欄の入力を違反とします。 (つまり、入力欄は埋める*必要があります*。) +- {{htmlattrxref("step", "input")}} 属性を使用すると、妥当な値を特定の刻みの値 (例えば、10の倍数) に制約することができます。 +- {{htmlattrxref("min", "input")}} および {{htmlattrxref("max", "input")}} 属性を使用すると、妥当な値の下限と上限を設けることができます。 -

次の例は上記の機能のすべてを例示しており、また幾らか CSS を用いて、 input の値によって、妥当または違反のアイコンを表示するようにします。

+次の例は上記の機能のすべてを例示しており、また幾らか CSS を用いて、 `input` の値によって、妥当または違反のアイコンを表示するようにします。 -
<form>
-  <div>
-    <label for="balloons">風船の注文数 (10の倍数):</label>
-    <input id="balloons" type="number" name="balloons" step="10" min="0" max="100" required>
-    <span class="validity"></span>
-  </div>
-  <div>
-    <input type="submit">
-  </div>
-</form>
+```html +
+
+ + + +
+
+ +
+
+``` -

{{EmbedLiveSample("Validation", 600, 80)}}

+{{EmbedLiveSample("Validation", 600, 110)}} -

様々な違反する値を入力して、フォームを送信しようとしてみてください。例えば、値なし、0未満または100を超えた値、10の倍数ではない値、数値でない値などです。そして、それぞれにおいてブラウザーがどのようなエラーメッセージを表示するかを確認してください。

+様々な違反する値を入力して、フォームを送信しようとしてみてください。例えば、値なし、 0 未満または 100 を超えた値、 10 の倍数ではない値、数値でない値などです。そして、それぞれにおいてブラウザーがどのようなエラーメッセージを表示するかを確認してください。 -

この例で適用される CSS は以下の通りです。

+この例で適用される CSS は以下の通りです。 -
div {
+```css
+div {
   margin-bottom: 10px;
 }
 
@@ -279,65 +273,68 @@ input:invalid+span:after {
 input:valid+span:after {
   content: '✓';
   padding-left: 5px;
-}
- -

ここで、 {{cssxref(":invalid")}} および {{cssxref(":valid")}} 擬似クラスを用いて、隣の {{htmlelement("span")}} 要素の生成コンテンツとして無効または妥当の適切なアイコンを表示し、妥当性の視覚的なインジケーターにすることができます。

- -

別な <span> 要素に入れたのは自由度を高めるためです。ブラウザーによっては一部の種類のフォーム入力欄において、あまり効果的に生成コンテンツを表示できないことがあります (<input type="date"> の検証の節の例を読んでください)。

+} +``` -
-

重要: HTML のフォーム検証は、入力されたデータが正しい形式であることを保証するサーバースクリプトの代用にはなりません

+ここで、 {{cssxref(":invalid")}} および {{cssxref(":valid")}} 擬似クラスを用いて、隣の {{htmlelement("span")}} 要素の生成コンテンツとして無効または妥当の適切なアイコンを表示し、妥当性の視覚的なインジケーターにすることができます。 -

HTML を調整して検証をくぐり抜けたり、完全に削除したりすることはとても簡単にできます。 HTML をバイパスし、サーバーに直接データを送信することも可能です。

+別な `` 要素に入れたのは自由度を高めるためです。ブラウザーによっては一部の種類のフォーム入力欄において、あまり効果的に生成コンテンツを表示できないことがあります([`` の検証](/ja/docs/Web/HTML/Element/input/date#validation)の節の例を読んでください)。 -

サーバー側のコードが受信したデータの検証に失敗した場合、不適切な形式のデータ (または大きすぎるデータ、間違った種類のデータなど) がデータベースに入力された場合に災害が発生するおそれがあります。

-
+> **Warning:** HTML のフォーム検証は、入力されたデータが正しい形式であることを保証するサーバースクリプトの代用には*なりません*。 +> +> 誰かが HTML を調整して検証をくぐり抜けたり、完全に削除したりすることはとても簡単にできます。 HTML をバイパスし、サーバーに直接データを送信することも可能です。 +> +> サーバー側のコードが受信したデータの検証に失敗した場合、不適切な形式のデータ(または大きすぎるデータ、間違った種類のデータなど)がデータベースに入力された場合に災害が発生するおそれがあります。 -

パターンによる値検証

+### パターンによる値検証 -

<input type="number"> 要素は {{htmlattrxref("pattern", "input")}} 属性を使用して、入力された値が特定の正規表現パターンを満たすようにすることに対応していません。

+`` 要素は {{htmlattrxref("pattern", "input")}} 属性を使用して、入力された値が特定の正規表現パタ ー ンを満たすようにすることに対応していません。 -

これは、 number 入力欄は数値以外の何が入力されても妥当にはならないからであり、上記で説明したとおり、 {{htmlattrxref("min", "input")}} および {{htmlattrxref("max", "input")}} 属性を用いて妥当な数値の最大値および最小値を制約することができます。

+これは、 number 入力欄は数値以外の何が入力されても妥当にはならないからであり、上記で説明したとおり、 {{htmlattrxref("min", "input")}} および {{htmlattrxref("max", "input")}} 属性を用いて妥当な数値の最大値および最小値を制約することができます。 -

+## 例 -

すでに既定では増分が 1 であるという事実を扱いましたので、 {{htmlattrxref("step", "input")}} 属性を使用して実数を入力できるようにすることができます。もう少し詳しく見てみましょう。

+すでに既定では増分が `1` であるという事実を扱いましたので、 {{htmlattrxref("step", "input")}} 属性を使用して実数を入力できるようにすることができます。もう少し詳しく見てみましょう。 -

以下の例は、ユーザーの身長を入力するフォームです。既定では慎重をメートル単位で受け付けますが、関連するボタンをクリックすることでフォームがフィートとインチを受け付けるように変更することができます。メートル単位の身長の入力欄は小数第2位まで受け付けます。

+以下の例は、ユーザーの身長を入力するフォームです。既定では慎重をメートル単位で受け付けますが、関連するボタンをクリックすることでフォームがフィートとインチを受け付けるように変更することができます。メートル単位の身長の入力欄は小数第2位まで受け付けます。 -

{{EmbedLiveSample("Examples", 600, 100)}}

+{{EmbedLiveSample("Examples", 600, 150)}} -

HTML は次のようになります。

+HTML は次のようになります。 -
<form>
-    <div class="metersInputGroup">
-        <label for="meters">あなたの身長を入力してください (メートル):</label>
-        <input id="meters" type="number" name="meters" step="0.01" min="0" placeholder="例 1.78" required>
-        <span class="validity"></span>
-    </div>
-        <span>あなたの身長を入力してください — </span>
-        <label for="feet">フィート:</label>
-        <input id="feet" type="number" name="feet" min="0" step="1">
-        <span class="validity"></span>
-        <label for="inches">インチ:</label>
-        <input id="inches" type="number" name="inches" min="0" max="11" step="1">
-        <span class="validity"></span>
-    </div>
-    <div>
-      <input type="button" class="meters" value="身長をフィートとインチで入力">
-    </div>
-    <div>
-        <input type="submit" value="フォームを送信">
-    </div>
-</form>
+```html +
+
+ + + +
+ +
+ +
+
+ +
+
+``` -

これまでの記事ですでに見てきた属性の多くを使用していることがわかります。センチメートル単位のメートル値を受け入れるため、 step の値を 0.01 に設定して、 1.78 のような値が無効とされないようにしました。また、その入力欄のプレイスホルダーも提供しました。

+これまでの記事ですでに見てきた属性の多くを使用していることがわかります。センチメートル単位のメートル値を受け入れるため、 `step` の値を `0.01` に設定して、 _1.78_ のような値が無効とされないようにしました。また、その入力欄のプレイスホルダーも提供しました。 -

最初はフィートとインチの入力欄を class="hidden" を使用して非表示にしているため、既定はメートルでの入力です。

+最初はフィートとインチの入力欄を `style="display: none;"` を使用して非表示にしているため、既定はメートルでの入力です。 -

次に、 CSS に進みます。これは、以前に見た検証のスタイル付けととても良く似ています。ここで注目するところはありません。

+次に、 CSS に進みます。これは、以前に見た検証のスタイル付けととても良く似ています。ここで注目するところはありません。 -
div {
+```css
+div {
   margin-bottom: 10px;
   position: relative;
 }
@@ -360,11 +357,13 @@ input:valid+span:after {
   position: absolute;
   content: '✓';
   padding-left: 5px;
-}
+} +``` -

そして最後に、 JavaScript です。

+そして最後に、 JavaScript です。 -
let metersInputGroup = document.querySelector('.metersInputGroup');
+```js
+let metersInputGroup = document.querySelector('.metersInputGroup');
 let feetInputGroup = document.querySelector('.feetInputGroup');
 let metersInput = document.querySelector('#meters');
 let feetInput = document.querySelector('#feet');
@@ -398,51 +397,28 @@ switchBtn.addEventListener('click', function() {
     feetInput.value = '';
     inchesInput.value = '';
   }
-});
- -

いくつかの変数を宣言した後、イベントリスナーを button に追加し、切り替えの仕組みを制御しています。これはとても単純で、ほとんどがボタンの class と {{HTMLElement("label")}} を変更するためのものであり、そしてボタンが押されたときに2組の入力の display 値を更新しています。

- -

(なお、ここではメートルとフィート/インチの間の変換は行っていませんが、実際のウェブアプリケーションではおそらく行うでしょう。)

- -
-

注: ユーザーがボタンをクリックしたとき、 required 属性を非表示にする入力欄から削除し、 value 属性を空にしています。これは入力欄の両方の組が入力されていなくてもフォームを送信することができるようにしています。これはユーザーが意図していないデータをフォームが送信しないことを保証するものでもあります。

- -

これを行わないと、フィート/インチメートルの両方を入力してフォームを送信することができてしまいます。

-
- -

仕様書

- - - - - - - - - - - - - - - - - - - - - -
仕様書状態備考
{{SpecName('HTML WHATWG', 'forms.html#number-state-(type=number)', '<input type="number">')}}{{Spec2('HTML WHATWG')}}初回定義
{{SpecName('HTML5.1', 'sec-forms.html#number-state-typenumber', '<input type="number">')}}{{Spec2('HTML5.1')}}初回定義
+}); +``` + +いくつかの変数を宣言した後、イベントリスナーを `button` に追加し、切り替えの仕組みを制御しています。これはとても単純で、ほとんどがボタンの `class` と {{HTMLElement("label")}} を変更するためのものであり、そしてボタンが押されたときに2組の入力の display 値を更新しています。 + +(なお、ここではメートルとフィート/インチの間の変換は行っていませんが、実際のウェブアプリケーションではおそらく行うでしょう。) + +> **Note:** ユーザーがボタンをクリックしたとき、 `required` 属性を非表示にする入力欄から削除し、 `value` 属性を空にしています。これは入力欄の両方の組が入力されていなくてもフォームを送信することができるようにしています。これはユーザーが意図していないデータをフォームが送信しないことを保証するものでもあります。 +> +> これを行わないと、フィート/インチ**と**メートルの両方を入力してフォームを送信することができてしまいます。 + +## 仕様書 + +{{Specifications}} -

ブラウザーの互換性

+## ブラウザーの互換性 -

{{Compat("html.elements.input.input-number")}}

+{{Compat}} -

関連情報

+## 関連情報 - +- [HTML フォームガイド](/ja/docs/Learn/Forms) +- {{HTMLElement("input")}} +- [``](/ja/docs/Web/HTML/Element/input/tel) +- [CSS プロパティの互換性](/ja/docs/Learn/Forms/Property_compatibility_table_for_form_controls) -- cgit v1.2.3-54-g00ecf