aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/html/element/input/password/index.html
blob: 9eefb2bdab9b139a33e11a04b444083ee01c7abe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
---
title: <input type="password">
slug: Web/HTML/Element/input/password
tags:
  - Element
  - Forms
  - HTML
  - HTML Input Types
  - HTML Inputs
  - HTML Password Input
  - HTML forms
  - HTML input tag
  - Input Types
  - Reference
  - Web
  - password
translation_of: Web/HTML/Element/input/password
---
<div>{{HTMLRef("Input_types")}}</div>

<p><span class="seoSummary"><code>&lt;input&gt;</code> 要素の <strong><code>password</code></strong> 型は、パスワードを安全に入力する方法を提供します。</span>この要素はプレーンテキストの 1 行編集コントロールとして表示され、そのテキストは読み取られることがないように、1 つ 1 つの文字がアスタリスク ("*") やドット ("•") のような記号に置き換えられ、隠されます。この文字は{{Glossary("user agent", "ユーザーエージェント")}}{{Glossary("OS")}} によって変わります。</p>

<div>{{EmbedInteractiveExample("pages/tabbed/input-password.html", "tabbed-standard")}}</div>

<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div>

<p>詳細な入力プロセスの動作は、ブラウザーによって異なっている場合があります。例えば、モバイル端末ではしばしば、ユーザーが思ったとおりのキーを押したかどうかを確かめることができるように、入力した文字を、隠す前に一瞬だけ表示します。これは特に、キーのサイズが小さく、押し間違いが起こりやすい、仮想キーボードの場合に役立ちます。</p>

<div class="note">
<p>パスワードのような機密情報が含まれているフォーム (ログインフォームなど) は、 HTTPS で送信するべきです。現在では多くのブラウザーで、安全ではないログインフォームの場合に警告を行う仕組みが実装されています。詳細は<a href="/ja/docs/Web/Security/Insecure_passwords">安全でないパスワード</a>を参照してください。</p>
</div>

<table class="properties">
 <tbody>
  <tr>
   <td><strong>{{anch("Value", "値")}}</strong></td>
   <td>パスワードを表す {{domxref("DOMString")}}、または空欄</td>
  </tr>
  <tr>
   <td><strong>イベント</strong></td>
   <td>{{event("change")}} および {{event("input")}}</td>
  </tr>
  <tr>
   <td><strong>対応している共通属性</strong></td>
   <td>{{htmlattrxref("autocomplete", "input")}}, {{htmlattrxref("inputmode", "input")}}, {{htmlattrxref("maxlength", "input")}}, {{htmlattrxref("minlength", "input")}}, {{htmlattrxref("pattern", "input")}}, {{htmlattrxref("placeholder", "input")}}, {{htmlattrxref("readonly", "input")}}, {{htmlattrxref("required", "input")}}, {{htmlattrxref("size", "input")}}</td>
  </tr>
  <tr>
   <td><strong>IDL 属性</strong></td>
   <td><code>selectionStart</code>, <code>selectionEnd</code>, <code>selectionDirection</code>, <code>value</code></td>
  </tr>
  <tr>
   <td><strong>メソッド</strong></td>
   <td>{{domxref("HTMLInputElement.select", "select()")}}, {{domxref("HTMLInputElement.setRangeText", "setRangeText()")}}, {{domxref("HTMLInputElement.setSelectionRange", "setSelectionRange()")}}</td>
  </tr>
 </tbody>
</table>

<h2 id="Value" name="Value"></h2>

<p>{{htmlattrxref("value", "input")}} 属性は、パスワードを入力するために使われているテキスト編集コントロールの、現在の内容である {{domxref("DOMString")}} を格納します。ユーザーが何も入力していない場合、この値は空文字列 (<code>" "</code>) です。{{htmlattrxref("required")}} プロパティが指定されている場合、パスワード編集ボックスが妥当となるためには、空文字列以外の値を含まなければなりません。</p>

<p>{{htmlattrxref("pattern", "input")}} 属性が指定されている場合、<code>"password"</code> コントロールの内容は、その値が検証をパスした場合のみ、妥当とみなされます。詳細は {{anch("Validation")}} を参照してください。</p>

<div class="note">
<p>改行文字の LF (U+000A) と CR (U+000D) は <code>"password"</code> の値には許容されません。パスワードコントロールに値がセットされるとき、LF 及び CR は値から取り除かれます。</p>
</div>

<h2 id="Additional_attributes" name="Additional_attributes">追加の属性</h2>

<p>型に関係なくすべての {{HTMLElement("input")}} 要素を操作する属性に加え、 <code>password</code> 型の入力欄は次の属性にも対応しています。</p>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">属性</th>
   <th scope="col">説明</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td><code>{{anch("maxlength")}}</code></td>
   <td>値が取りうる UTF-16 文字単位での最大長</td>
  </tr>
  <tr>
   <td><code>{{anch("minlength")}}</code></td>
   <td>妥当と判断される最小文字数</td>
  </tr>
  <tr>
   <td><code>{{anch("pattern")}}</code></td>
   <td>妥当と判断されるために、入力欄の内容が一致する必要がある正規表現</td>
  </tr>
  <tr>
   <td><code>{{anch("placeholder")}}</code></td>
   <td>空欄の時に入力欄に表示される入力例の値</td>
  </tr>
  <tr>
   <td><code>{{anch("readonly")}}</code></td>
   <td>入力欄の内容を読み取り専用にするかどうかを示す論理属性</td>
  </tr>
  <tr>
   <td><code>{{anch("size")}}</code></td>
   <td>入力欄の長さを何文字分にするかを表す数値</td>
  </tr>
 </tbody>
</table>

<h3 id="htmlattrdefmaxlength">{{htmlattrdef("maxlength")}}</h3>

<p>ユーザーがパスワード入力欄に入力することができる (UTF-16 コード単位での) 最大文字数です。 0 以上の整数値である必要があります。 <code>maxlength</code> が指定されていないか、無効な値が指定されていると、パスワード入力欄には最大文字数が設定されません。この値は <code>minlength</code> の値以上である必要もあります。</p>

<p>フィールドに入力されたテキストの長さが UTF-16 コード単位で <code>maxlength</code> の長さを超えていると、その入力欄は<a href="/ja/docs/Web/Guide/HTML/HTML5/Constraint_validation">制約検証</a>に失敗します。</p>

<h3 id="htmlattrdefminlength">{{htmlattrdef("minlength")}}</h3>

<p>ユーザーがパスワード入力欄に入力することができる (UTF-16 コード単位での) 最小文字数です。これは非負の整数値で、 <code>maxlength</code> で指定された値以下である必要があります。 <code>minlength</code> が指定されていないか、無効な値が指定されていると、パスワード入力欄には最小文字数が設定されません。</p>

<p>入力欄のテキストの長さが UTF-16 コード単位で <code>minlength</code> の長さよりも短いと、その入力欄は<a href="/ja/docs/Web/Guide/HTML/HTML5/Constraint_validation">制約検証</a>に失敗します。</p>

<h3 id="htmlattrdefpattern">{{htmlattrdef("pattern")}}</h3>

<p>{{page("/ja/docs/Web/HTML/Element/input/text", "pattern-include")}}</p>

<p>pattern の使用はパスワード入力において、ユーザーが幅広い種類の文字クラスを使用した有効なパスワードを選択して使用するのに役立ちます。パターンを使用すると、大文字・小文字の規則、数桁の数字や区切り記号などの使用を義務づけることができます。詳細と例については{{anch("Validation", "検証")}}の節を参照してください。</p>

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

<h3 id="htmlattrdefreadonly">{{htmlattrdef("readonly")}}</h3>

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

<div class="note">
<p><strong>注:</strong> 読み取り専用フィールドは値を持てないため、 <code>required</code><code>readonly</code> 属性も指定されている入力欄には効果がありません。</p>
</div>

<p>{{page("/ja/docs/Web/HTML/Element/input/text", "size", 0, 1, 2)}}</p>

<h2 id="Using_password_inputs" name="Using_password_inputs">パスワード入力欄の使用</h2>

<p>パスワード入力ボックスは通常、他のテキスト入力ボックスのように動作します。主な違いは、ユーザーの近くにいる人がパスワードを読み取ることを防ぐために、その内容を隠すことです。</p>

<h3 id="A_simple_password_input" name="A_simple_password_input">シンプルなパスワード入力欄</h3>

<p>以下は最も基本的なパスワード入力欄で、{{HTMLElement("label")}} 要素を使ったラベルとともに設置されています。</p>

<pre class="brush: html notranslate">&lt;label for="userPassword"&gt;Password: &lt;/label&gt;
&lt;input id="userPassword" type="password"&gt;</pre>

<p>{{EmbedLiveSample("A_simple_password_input", 600, 40)}}</p>

<h3 id="Allowing_autocomplete" name="Allowing_autocomplete">オートコンプリートを許可する</h3>

<p>パスワードを自動的に入力するため、ユーザーのパスワードマネージャを許可するには、{{htmlattrxref("autocomplete", "input")}} 属性を指定します。パスワードの場合、通常は次のいずれかの値をとります。</p>

<dl>
 <dt><code>"on"</code></dt>
 <dd>ブラウザー、あるいはパスワードマネージャが自動的にパスワード欄を埋めることを許可します。これは、<code>"current-password"</code> あるいは<code>"new-password"</code> を使用するほど有益ではありません。</dd>
 <dt><code>"off"</code></dt>
 <dd>ブラウザー、あるいはパスワードマネージャが自動的にパスワード欄を埋めることを許可しません。いくつかのソフトウェアはこの値を無視しますが、それは通常、ユーザーの安全なパスワードの実践を維持する能力を、阻害するものであることに注意してください。</dd>
 <dt><code>"current-password"</code></dt>
 <dd>ブラウザー、あるいはパスワードマネージャがサイトのための現在のパスワードを入力することを許可します。この値はブラウザー、あるいはパスワードマネージャに、そのサイトの既知のパスワードを自動的に入力させ、新しいパスワードを提案するものではないもので、<code>"on"</code> よりも多くの情報を提供します。</dd>
 <dt><code>"new-password"</code></dt>
 <dd>ブラウザー、あるいはパスワードマネージャが、そのサイトの新しいパスワードを自動的に入力することを許可します。これは「パスワードの変更」や「新規ユーザー」フォームの、ユーザーに新しいパスワードを求める入力欄で使われます。新しいパスワードは、パスワードマネージャによって、複数の方法で生成される場合があります。単に新しく提示されるパスワードで埋めるかもしれませんし、あるいは新しいパスワードを生成するインターフェイスを、ユーザーに見せるかもしれません。</dd>
</dl>

<div id="Autocomplete_sample1">
<pre class="brush: html notranslate">&lt;label for="userPassword"&gt;Password:&lt;/label&gt;
&lt;input id="userPassword" type="password" autocomplete="current-password"&gt;</pre>
</div>

<p>{{EmbedLiveSample("Autocomplete_sample1", 600, 40)}}</p>

<h3 id="Making_the_password_mandatory" name="Making_the_password_mandatory">パスワードを必須にする</h3>

<p>ユーザーのブラウザーに対し、フォームの送信前に、パスワード欄が妥当な値を持っていなければならないことを伝えるためには、ただ {{htmlattrxref("required", "input")}} 論理属性を指定するだけです。</p>

<pre class="brush: html notranslate">&lt;label for="userPassword"&gt;Password: &lt;/label&gt;
&lt;input id="userPassword" type="password" required&gt;
&lt;input type="submit" value="Submit"&gt;</pre>

<p>{{EmbedLiveSample("Making_the_password_mandatory", 600, 40)}}</p>

<h3 id="Specifying_an_input_mode" name="Specifying_an_input_mode">入力モードを指定する</h3>

<p>推奨する、または必須となるパスワードの構文ルールが、標準キーボードよりも、代替となるテキスト入力インターフェースから恩恵を受ける場合、特定のものを要求するために {{htmlattrxref("inputmode", "input")}} 属性を使用することができます。この最も明快な用途は、 PIN のようにパスワードが数字で構成されていることを必要とする場合です。例えば、仮想キーボードを持つモバイル端末では、パスワードの入力をより簡単にするため、フルキーボードの代わりに、数字のキーパッドレイアウトに切り替えることを選択するかもしれません。 PIN が1回限りの使用であれば、 {{htmlattrxref("autocomplete", "input")}} 属性を <code>off</code> または <code>one-time-code</code> のどちらかに設定してサジェストが保存されないようにしてください。</p>

<pre class="brush: html notranslate">&lt;label for="pin"&gt;PIN: &lt;/label&gt;
&lt;input id="pin" type="password" inputmode="numeric"&gt;</pre>

<p>{{EmbedLiveSample("Specifying_an_input_mode", 600, 40)}}</p>

<h3 id="Setting_length_requirements" name="Setting_length_requirements">長さの要件を設定する</h3>

<p>普通、{{htmlattrxref("minlength", "input")}} 属性や {{htmlattrxref("maxlength", "input")}} 属性を使って、許容する最小の長さと最大の長さをパスワードに適用することができます。この例では、直前の例を拡張して、ユーザーの PIN が 4 〜 8文字でなければならないことを指定しています。{{htmlattrxref("size", "input")}} 属性は、パスワード入力コントロールが 8 文字分の幅であることを保証するために使用されています。</p>

<pre class="brush: html notranslate">&lt;label for="pin"&gt;PIN:&lt;/label&gt;
&lt;input id="pin" type="password" inputmode="numeric" minlength="4"
       maxlength="8" size="8"&gt;</pre>

<p>{{EmbedLiveSample("Setting_length_requirements", 600, 40)}}</p>

<h3 id="Selecting_text" name="Selecting_text">テキストを選択する</h3>

<p>他のテキスト入力コントロールのように、 {{domxref("HTMLInputElement.select", "select()")}} メソッドを使って、パスワード欄のすべてのテキストを選択することができます。</p>

<h4 id="HTML">HTML</h4>

<pre class="brush: html notranslate">&lt;label for="userPassword"&gt;Password: &lt;/label&gt;
&lt;input id="userPassword" type="password" size="12"&gt;
&lt;button id="selectAll"&gt;Select All&lt;/button&gt;
</pre>

<h4 id="JavaScript">JavaScript</h4>

<pre class="brush: js notranslate">document.getElementById("selectAll").onclick = function() {
  document.getElementById("userPassword").select();
}</pre>

<h4 id="Result" name="Result">結果</h4>

<p>{{EmbedLiveSample("Selecting_text", 600, 40)}}</p>

<p>また、{{domxref("HTMLInputElement.selectionStart", "selectionStart")}}{{domxref("HTMLInputElement.selectionEnd", "selectionEnd")}} を使って、コントロールの文字がどの範囲で選択されているかを取得または設定することができ、{{domxref("HTMLInputElement.selectionDirection", "selectionDirection")}} を使って、どの方向に選択が発生したのか(あるいは広げようとしているのか。プラットフォームに依存します。詳細は各ドキュメントを参照してください)を知ることができます。しかしながら、与えられるテキストは隠されており、その有用性は幾分か制限されています。</p>

<h2 id="Validation" name="Validation">検証</h2>

<p>もしアプリケーションが文字セットの制限を有している場合、あるいは入力されたパスワードの実際の内容について、他の何らかの要件がある場合には、{{htmlattrxref("pattern", "input")}} 属性を使って、パスワードがそれらの要件に合致しているか自動的に確認するための正規表現を設定することができます。</p>

<p>この例では、4 〜 8 文字の 16 進数の数字のみが妥当です。</p>

<div id="Validation_sample1">
<pre class="brush: html notranslate">&lt;label for="hexId"&gt;Hex ID: &lt;/label&gt;
&lt;input id="hexId" type="password" pattern="[0-9a-fA-F]{4,8}"
       title="Enter an ID consisting of 4-8 hexadecimal digits"
       autocomplete="new-password"&gt;</pre>
</div>

<p>{{EmbedLiveSample("Validation_sample1", 600, 40)}}</p>

<dl>
 <dt>{{htmlattrdef("disabled")}}</dt>
 <dd>
 <p>この論理属性は、そのパスワード欄がやり取りに利用できないことを示します。また、無効な入力欄の値は、フォームとともに送信されません。</p>
 </dd>
</dl>

<h2 id="Examples" name="Examples"></h2>

<h3 id="Requesting_a_Social_Security_number" name="Requesting_a_Social_Security_number">社会保障番号を要求する</h3>

<p>この例では、<a href="https://ja.wikipedia.org/wiki/%E7%A4%BE%E4%BC%9A%E4%BF%9D%E9%9A%9C%E7%95%AA%E5%8F%B7#%E6%AD%A3%E5%BD%93%E3%81%AA%E7%95%AA%E5%8F%B7">妥当なアメリカ合衆国の社会保障番号</a>の形式に合致する入力のみが受け付けられます。これらの数字はアメリカ合衆国において、税や個人の識別を目的として使われており、その形式は "123-45-6789" です。各種、それぞれのグループ内でどのような値が許可されているかについてのルールも存在しています。</p>

<h4 id="HTML_2">HTML</h4>

<pre class="brush: html notranslate">&lt;label for="ssn"&gt;SSN:&lt;/label&gt;
&lt;input type="password" id="ssn" inputmode="numeric" minlength="9" maxlength="12"
    pattern="(?!000)([0-6]\d{2}|7([0-6]\d|7[012]))([ -])?(?!00)\d\d\3(?!0000)\d{4}"
    required autocomplete="off"&gt;
&lt;br&gt;
&lt;label for="ssn"&gt;Value:&lt;/label&gt;
&lt;span id="current"&gt;&lt;/span&gt;</pre>

<p>ここでは {{htmlattrxref("pattern", "input")}} を使って、入力される値を、正当な社会保障番号を示す文字列に制限しています。明らかに、この正規表現は、妥当な SSN であることを保証していません(社会保障局のデータベースにアクセスしているわけではないので)が、その番号が SSN になり得るものであることは保証しています。一般に、値が妥当になり得ないことを避けています。加えて、3 つの数字のグループがスペース、ダッシュ ("-") で区切る、あるいは区切らないことを許容しています。</p>

<p>{{htmlattrxref("inputmode", "input")}}<code>"numeric"</code> にセットされ、より入力しやすくするために、仮想キーボードを持つ端末が数字キーパッドレイアウトに切り替えることを支援しています。{{htmlattrxref("minlength", "input")}}{{htmlattrxref("maxlength", "input")}} がそれぞれ 9 と 12 にセットされ、値が 9 〜 12 文字 (前者はグループ間の区切り文字無し、後者は有り) であることを要件としています。 {{htmlattrxref("required", "input")}} 属性は、このコントロールが値を持っていなければならないことを示すために使われています。最後に、 {{htmlattrxref("autocomplete", "input")}}<code>"off"</code> にセットされており、これはまったくパスワードではないので、パスワードマネージャーが値をセットしようとすることを回避しています。</p>

<h4 id="JavaScript_2">JavaScript</h4>

<p>これは実にシンプルなコードで、入力された SSN を見られるように、画面に表示するためのものです。これは明らかに、パスワード欄の目的を損ねるものですが、<code>pattern</code> を試すには役立ちます。</p>

<pre class="brush: js notranslate">var ssn = document.getElementById("ssn");
var current = document.getElementById("current");

ssn.oninput = function(event) {
  current.innerHTML = ssn.value;
}</pre>

<h4 id="Result_2" name="Result_2">結果</h4>

<p>{{EmbedLiveSample("Requesting_a_Social_Security_number", 600, 60)}}</p>

<h2 id="Specifications" name="Specifications">仕様書</h2>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">仕様書</th>
   <th scope="col">状態</th>
   <th scope="col">備考</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>{{SpecName('HTML WHATWG', 'forms.html#password-state-(type=password)', '&lt;input type="password"&gt;')}}</td>
   <td>{{Spec2('HTML WHATWG')}}</td>
   <td>初回定義</td>
  </tr>
  <tr>
   <td>{{SpecName('HTML5.1', 'sec-forms.html#password-state-typepassword', '&lt;input type="password"&gt;')}}</td>
   <td>{{Spec2('HTML5.1')}}</td>
   <td>初回定義</td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2>

<p>{{Compat("html.elements.input.input-password")}}</p>

<h2 id="See_also" name="See_also">関連情報</h2>

<ul>
 <li><a href="/ja/docs/Learn/Forms/Property_compatibility_table_for_form_controls">CSS プロパティの互換性</a></li>
</ul>