* [CODE(HTMLa)@en[maxlength]] 属性 (HTML)
[1] [[HTML]] の [CODE(HTMLe)[[[input]]]] [[要素]]と
[CODE(HTMLe)@en[[[textarea]]]] [[要素]]の
[DFN[[CODE(HTMLa)[maxlength]] 属性]]は、
利用者が入力できる最大文字数を指定します。
[9]
:状態:[[W3C]] [[勧告]]、[[WHATWG]] [[WD]]
:[[要素型]]:
[CODE(HTMLe)@en[[[input]]]]、[CODE(HTMLe)@en[[[textarea]]]]
:[CODE(DOMa)@en[[[type]]]]:
[CODE(HTML)@en[[[text]]]]、
[CODE(HTML)@en[[[password]]]]、
[CODE(HTML)@en[[[email]]]]、
[CODE(HTML)@en[[[url]]]]、
[CODE(HTMLe)@en[[[textarea]]]]
:[[属性名]]:[CODE(HTMLa)@en[[[maxlength]]]]
([Q@en[maximum length]] ([Q[最大長]]) より)
:[[属性値]]:[[文字数]] (>>3)
:[[既定値]]:制限なし (>>4)
[2] 仕様書:
- [[HTML 4]]
-- [CODE(HTMLe)[input]] 要素 [CODE(HTMLa)[maxlength]] 属性
- [[Web Forms 2.0]]
-- [CSECTION@en[2.5. Extensions to existing attributes]]
** 属性値
[3] この属性の値は [CODE(SGML)[[[NUMBER]]]] です。
最大の文字数を指定します。
[4] この属性は省略可能です。省略時は無制限と見なされます。 [SRC[HTML 4 17.4]]
** 数え方
[12]
[CODE(HTMLa)@en[[[maxlength]]]] [[属性]]の値は、
[[文字]]の[[数]] ([[符号位置]]の[[数]])
を制約します。
[SRC@en[WF2 2.5]]
[13]
[CODE(HTMLe)@en[[[textarea]]]] では、
[[改行]]は、 [CODE(HTMLa)@en[[[wrap]]]]
[[属性]]の[[値]]に依存して追加されるものも含め、
1つ2[[文字]] ([CODE(charname)@en[[[CR]]]]
[CODE(charname)@en[[[LF]]]]) と数えます。
[SRC@en[WF2 2.5、2.14]]
[17]
この[[属性]]は[[初期値]] ([CODE(DOMa)@en[[[defaultValue]]]])
には影響[['''してはなりません''']]。
[[利用者]]の入力や[[妥当性検証]]にのみ影響[['''しなければなりません''']]。
[SRC@en[WF2 2.5]]
** 安全性
[16]
[[フォーム処理エージェント]]は、
悪意の有る[[利用者]]や[[不適合]]の[[利用者エージェント]]を考慮し、
[CODE(HTMLa)@en[[[maxlength]]]] [[属性]]が指定されていたとしても、
必要ならば入力値の長さの検査を[['''するべきです''']]。
[SRC@en[WF2 2.5]]
[[#comment]]
** 歴史
[6]
HTML 4 DTD の[[注釈]] (参考) には
[Q[max chars for text fields]]
と説明があります。
[10]
[CODE(HTMLa)@en[[[maxlength]]]] [[属性]]は、
[[HTML 4]] では [CODE(HTMLe)@en[[[input]]]]
[[要素]]の [CODE(HTML)@en[[[text]]]] と
[CODE(HTML)@en[[[password]]]] にだけ定義されていました。
[11]
[[Web Forms 2.0]] では、
[CODE(HTMLe)@en[[[input]]]] の
[CODE(HTML)@en[[[email]]]] と
[CODE(HTML)@en[[[url]]]]
にも適用されるようになりました。
また、 [CODE(HTMLe)@en[[[textarea]]]]
にも定義されました。
** 実装
[8]
[CITE[Bug 345267 - If the initial text input value is longer than maxlength it is truncated.]]
([[名無しさん]] [WEAK[2006-07-22 04:28:31 +00:00]])
[[#comment]]
** 関連
[5] この属性の値は、 [CODE(HTMLa)[[[size]]]] 属性の値を超えても構いません。
その場合は、 UA は何らかの scroll の仕組みを用意するべきです。
[SRC[HTML 4 17.4]]
[15]
[CODE(HTMLa)@en[[[maxlength]]]] が
[CODE(HTML)@en[[[text]]]], [CODE(HTML)@en[[[password]]]],
[CODE(HTML)@en[[[email]]]], [CODE(HTML)@en[[[url]]]],
[CODE(HTMLe)@en[[[textarea]]]]
に対して与えられ、その[[制御子]]が指定された[[数]]よりも多くの[[符号位置]]を含み、
''しかもその[[値]]が[[既定値]]とは[[一致]]しない''なら、
[CODE(DOM)@en[[[tooLong]]]] [[妥当性検証誤り]]が[[報告]]されます。
[SRC@en[WF2 2.5]]
[[#comment]]
** 例
[18]
[PRE(HTML example code)[
]PRE]
この[[制御子]]は、[[値が選択されていない]]ときだけ[[妥当]]になります。
[SRC@en[WF2 2.5]]
;; 長さが1の[[電子メイル・アドレス]]は存在しないからです。
[[#comment]]
** メモ
[7]
[[正規化]]や[[提出]]時の[[文字コード]]の変換によって、
同じ[[文字列]]のはずでも長さが変わって[CODE(HTMLa)@en[[[maxlength]]]]の制限を満たさなくなることがあります。
[14]
[CODE(HTML)@en[[[email]]]] や
[CODE(HTML)@en[[[url]]]]
で [CODE(HTMLa)@en[[[maxlength]]]]
[[属性]]を使うことは、
実際に[[フォーム処理エージェント]]で制限がある場合を除き、
[[非推奨]]とされています。
[[電子メイル・アドレス]]や [[URI]]
は[[著者]]の考える以上に長いことがざらにあるからです。
[SRC@en[WF2 2.5]]
[[#comment]]
* メモ
[32] [CITE['''['''whatwg''']''' Constraint validation for maxlength]]
([TIME[2010-07-24 16:00:43 +09:00]] 版)
[33] [CITE[IRC logs: freenode / #whatwg / 20100906]]
( ([TIME[2010-09-23 19:52:11 +09:00]] 版))
[34] [CITE@en[Web Applications 1.0 r6413 Semi-allow for legacy reasons.]]
( ([TIME[2011-08-11 08:54:00 +09:00]] 版))