-
Notifications
You must be signed in to change notification settings - Fork 4
/
921.txt
278 lines (215 loc) · 9.89 KB
/
921.txt
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
[4]
[CODE(HTMLe)@en[[[input]]]] [[要素]]と
[CODE(HTMLe)@en[[[textarea]]]] [[要素]]の
[DFN[[CODE(HTMLa)@en[[[pattern]]]] [[属性]]]]は、
[[値]]が[[一致]]しなければならない[[パターン]]を指定します。
[SRC@en[WF2 2.6]]
[6]
:[[要素型]]:
[CODE(HTMLe)@en[[QN[[[input]]] [http://www.w3.org/1999/xhtml]]]],
[CODE(HTMLe)@en[[QN[[[textarea]]] [http://www.w3.org/1999/xhtml]]]]
:[CODE(DOMa)@en[[[type]]]]:
[CODE(HTML)@en[[[text]]]],
[CODE(HTML)@en[[[password]]]],
[CODE(HTML)@en[[[url]]]],
[CODE(HTML)@en[[[email]]]],
[CODE(HTMLe)@en[[[textarea]]]]
* 仕様書
[REFS[
- [28] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-12-29 06:24:12 +09:00]] 版) <https://html.spec.whatwg.org/#the-pattern-attribute>
]REFS]
* 属性値
[5]
[CODE(HTMLa)@en[[[pattern]]]] [[属性値]]は、
[[ECMA 262]] 第3版で規定されている[[正規表現]]です。
[SRC@en[WF2 2.6]]
[10]
ただし、[[利用者エージェント]]は、
[[値]]全体に対して[[一致]]するか検査[['''しなければなりません''']]。
つまり、最初に [CODE(JS)@en[[[^]][[(?:]]]] が、最後に
[CODE(JS)@en[[[)]][[$]]]] があるものとして扱われます。
また、[[旗]] [CODE@en[[[global]]]], [CODE@en[[[ignoreCase]]]],
[CODE@en[[[multiline]]]] はいずれも無効と[['''しなければなりません''']]。
[SRC@en[WF2 2.6]]
;;
[11]
全体と[[一致]]するとしたのは、
ほとんどの場合[[著者]]はそうしたいであろうこと、
[[著者]]は一部とだけ[[一致]]を確認したいが[[利用者エージェント]]は全体と[[一致]]を試みるなら実際に試してみれば意図通りに動作しないことにすぐ気づくが、
逆に[[著者]]は全体と[[一致]]を確認したいが[[利用者エージェント]]は一部と[[一致]]を試みるとしたら実際に試してみても気づきにくいことからです。
[SRC@en[WF2 2.6]]
;;
[12]
[[旗]] [CODE@en[[[multiline]]]] が無効なので、
[CODE(JS)@en[[[.]][[*]]]] は[[改行]]と[[一致]]しません。
代わりに、 [CODE(JS)[[['''[''']][[\s]][[\S]][[''']''']][[*]]]]
などを使えば[[改行]]も含めて[[一致]]させられます。
[SRC@en[WF2 2.6]]
;;
[13]
[[ECMAScript]] の[[ソース・コード]]に記述する場合とは異なり、
[CODE(char)[[[/]]]] は特別な意味を持ちません。
(>>14) [SRC@en[WF2 2.6]]
[7] '''既定値'''
この[[属性]]が与えられなければ、
[[パターン]]の制約はないものとされます。
[SRC@en[WF2 2.6]]
[18] '''誤り処理'''
[[属性値]]が[[妥当]]な[[正規表現]]でない場合、
[[値]]の[[妥当性検証]]に関しては、
[CODE(HTMLa)@en[[[pattern]]]] [[属性値]]が与えられなかったかのように処理します。
[SRC@en[WF2 2.6]]
[32] [[利用者エージェント]]は、[[コンパイル]]に失敗した時は、
[[著者]]を助けるため[[開発者コンソール]]に報告する[RUBYB[べき]@en[encouraged]]です [SRC[>>28]]。
* 提出
[8]
[[フォーム]]を[[提出]]するためには、
[CODE(HTMLa)@en[[[pattern]]]] [[属性]]で指定された[[パターン]]に[[欄]]の[[値]]が[[一致]][['''しなければなりません''']]。
[SRC@en[WF2 2.6]]
[15]
[CODE(HTML)@en[[[email]]]] と [CODE(HTML)@en[[[url]]]]
では、 [CODE(HTMLa)@en[[[type]]]] の定義上の[[値]]の制約に加え、
[CODE(HTMLa)@en[[[pattern]]]] の制約にも[[一致]][['''しなければなりません''']]。
[SRC@en[WF2 2.6]]
[17]
[[利用者エージェント]]は、[[値]]が
[CODE(HTMLa)@en[[[pattern]]]] と[[一致]]しない場合、
[[旗]] [CODE(DOM)@en[[[patternMismatch]]]]
を設定[['''しなければなりません''']]。
[SRC@en[WF2 2.6]]
;; [CODE(HTMLa)@en[[[type]]]] による制約にも[[一致]]しない場合は、
[CODE(DOM)@en[[[typeMismatch]]]]
も設定[['''しなければなりません''']]。
[19]
なお、[[値が選択されていない]][[欄]]は、
[CODE(HTMLa)@en[[[pattern]]]]
と[[一致]]する必要はありません。
[SRC@en[WF2 2.6]]
[[#comment]]
** 安全性
[1] [[Web Forms 2.0]] では、[[利用者エージェント]]が、
[[安全性]]のために、[[著者]]が指定できる値の長さを制限することを勧めています。
例として、 [CODE(HTMLa)@en[[[pattern]]]] に指定した[[正規表現]]の[[評価]]に長くかかり過ぎるなら、
長さを制限すればよい、と述べています。
;; <IW:WF2:"#security">
[[#comment]]
** 関連
[20]
[[著者]]は、 [CODE(HTMLa)@en[[[pattern]]]]
[[属性]]の説明を [CODE(HTMLa)@en[[[title]]]]
[[属性]]に含めるように[['''するべきです''']]。
[[利用者エージェント]]は、
[CODE(HTMLa)@en[[[pattern]]]] に[[一致]]しない時やその他適切な時に[[利用者]]に
[CODE(HTMLa)@en[[[title]]]] [[属性]]の[[内容]]を通知[['''して構いません''']]。
[SRC@en[WF2 2.6]]
[22]
[CODE(HTMLa)@en[[[pattern]]]] [[属性]]と
[CODE(HTMLa)@en[[[title]]]] [[属性]]の両方を使用する場合、
[CODE(HTMLa)@en[[[title]]]] [[属性]]は[[パターン]]を説明[['''しなければなりません''']]。
[[利用者]]がその[[欄]]に入力するに当たって有用ならば、
他の情報も含めることもできます。
[SRC@en[WF2 2.6]]
;;
もし [CODE(HTMLa)@en[[[title]]]] が[[パターン]]の説明でなく、
単なる[[欄]]の名前にとどまっていると、
[Q[入力された内容は[[パターン]]に[[一致]]していません。誕生日。]]
のようにおかしなことになります。
[SRC@en[WF2 2.6]]
[23]
[[利用者エージェント]]は、 [[tooltip]]
その他の方法で、[[誤り]]がなくとも [CODE(HTMLa)@en[[[title]]]]
を[[レンダリング]][['''して構いません''']]。
[[利用者]]は、[[誤り]]が起こったことを前提とする文言にしないように注意[['''するべきです''']]。
[SRC@en[WF2 2.6]]
[[#comment]]
** 例
[2]
[PRE(HTML example code)[
pattern="[\x00-\x7F]+"
]PRE]
[CODE(HTML)@en[[[url]]]] や [CODE(HTML)@en[[[email]]]]
で使うと、 [[IDN]] の ([[IDNA]] [[符号化]]されていない)
[[ドメイン名]]の[[提出]]を阻止できます。
;; <IW:WF2:"#IDN">
[9]
[PRE(HTML example code)[
<label> Credit Card Number:
<input type="text" pattern="[0-9]{13-16}" name="cc" />
</label>
]PRE]
[SRC@en[WF2 2.6]]
[14]
[PRE(HTML example code)[
pattern="/etc/.+"
]PRE]
[PRE(HTML example code)[
pattern="\/etc\/.+"
]PRE]
[[ECMAScript]] の[[ソース・コード]]中とは異なり、
[CODE(char)[[[/]]]] は特別な意味を持ちません (>>13)。
ですから、この2つの例はいずれも同じ意味になります。
[16] [SRC@en[WF2 2.6]]
[PRE(HTML bad example code)[
<form>
<p>
This form could never be submitted, as the following required field
can never be satisfied:
<input type="url" pattern="[^:]+" required="required" name="test"/>
</p>
</form>
]PRE]
この例では、[[値]]は [[IRI]] と[['''しなければなりません''']]
([CODE(HTMLa)@en[[[type]]]] [CODE(HTML)@en[[[url]]]]) し、
[CODE(char)[[[:]]]] が含まれないように[['''しなければなりません''']]
([CODE(HTMLa)@en[[[pattern]]]]) し、
[[値が選択されていない]]状態と[['''してはなりません''']]
([CODE(HTMLa)@en[[[required]]]])。
これらの条件をすべて満たすことは ([[IRI]] の構文の定義上)
不可能なので、この[[フォーム]]は[[提出]]できません。
;; このように矛盾する制約が課されていても、
意味はありませんが、[[不適合]]とはなりません。
[SRC@en[WF2 2.6]]
[21] [SRC@en[WF2 2.6]]
[PRE(HTML example code)[
<label> Part number:
<input pattern="[0-9][A-Z]{3}" name="part"
title="A part number is a digit followed by three uppercase letters."/>
</label>
]PRE]
[[利用者エージェント]]は、[[利用者]]に次のような通知を表示することができます
(>>20)。
[SRC@en[WF2 2.6]]
> A part number is a digit followed by three uppercase letters.
> You cannot complete this form until the field is correct.
* 歴史
** Web Forms 2.0
[29] [[WF2]] で導入されました。
[REFS[
- [3] [[Web Forms 2.0]]
-- [CSECTION@en[2.6. The [CODE(HTMLa)@en[[[pattern]]]] attribute]]
<IW:WF2:"#the-pattern">
]REFS]
[30] [[Opera]] が最初に実装しました。
[31] その後仕様書の統合により [[HTML5]] に移動しました。
* メモ
[24] [CITE@en[Web Applications 1.0 r5738 Define <input type=email multiple pattern='...'> as applying to each e-mail address, not to the whole list.]]
( ([TIME[2011-01-05 08:28:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5737&to=5738>
[25] [CITE@en[Bug 15291 – Allow textarea@pattern (input@pattern is specced already so why not)]]
( ([TIME[2013-10-05 12:53:16 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=15291>
[26] [CITE@en[Web Applications 1.0 r8833 Make pattern='' support Unicode properly.]]
( ([TIME[2014-10-11 05:40:00 +09:00]] 版))
<https://html5.org/r/8833>
[27] [CITE@en[Encourage logging pattern="" compilation failures · whatwg/html@d2a0cbd]]
([TIME[2016-01-02 11:09:12 +09:00]] 版)
<https://github.com/whatwg/html/commit/d2a0cbdec345ffe5cc803683b30971b5786a5188>
[33] [CITE@en[HTMLのpattern属性とJavaScript正規表現のunicodeオプション - Hatena Developer Blog]]
([TIME[2016-04-29 12:22:54 +09:00]] 版)
<http://developer.hatenastaff.com/entry/2016/04/28/172005>
[34] [CITE@en[Refine the inputmode attribute, and expose it on contenteditable]]
([[dtapuska]]著, [TIME[2017-12-15 03:35:19 +09:00]])
<https://github.com/whatwg/html/commit/d430f275f4e253956a5965c8b90885d3ac4e90c1>
[35] [CITE@en[Digit input type · Issue #1626 · whatwg/html]]
([TIME[2017-12-17 22:53:09 +09:00]])
<https://github.com/whatwg/html/issues/1626>