* [CODE(HTMLa)@en[pattern]] 属性 (HTML) [4] [CODE(HTMLe)@en[[[input]]]] [[要素]]と [CODE(HTMLe)@en[[[textarea]]]] [[要素]]の [DFN[[CODE(HTMLa)@en[[[pattern]]]] [[属性]]]]は、 [[値]]が[[一致]]しなければならない[[パターン]]を指定します。 [SRC@en[WF2 2.6]] [6] :状態:[[WHATWG]] [[WD]] :[[要素型]]: [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]]]] :[[属性名]]:[CODE(HTMLa)@en[[[pattern]]]] ([Q@en[[[pattern]]]] ([Q@en[[[パターン]]]]) より) :[[属性値]]:[[ECMAScript]] [[正規表現]] (>>5) :[[既定値]]:制約なし (>>7) [3] 仕様書: - [[Web Forms 2.0]] -- [CSECTION@en[2.6. The [CODE(HTMLa)@en[[[pattern]]]] attribute]] ** 属性値 [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]] [[#comment]] ** 提出 [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]]]] に指定した[[正規表現]]の[[評価]]に長くかかり過ぎるなら、 長さを制限すればよい、と述べています。 ;; [[#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]] [[符号化]]されていない) [[ドメイン名]]の[[提出]]を阻止できます。 ;; [9] [PRE(HTML example code)[ ]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)[

This form could never be submitted, as the following required field can never be satisfied:

]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)[ ]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. [[#comment]] ** メモ [[#comment]] * メモ