input要素のmaxlength
属性で、入力可能な最大文字数を指定できます。
<input maxlength="8">
例として、上の例では8文字まで入力できる設定になっています。ですがこの属性を信頼しすぎてはいけません。
文字数がオーバーするケース
value属性により、最初からmaxlength
以上の文字数を設定できます。
<input name="input__text" maxlength="8" value="foooooooooooooooo">
JavaScriptで要素のvalue
プロパティを変更する時も、maxlength
は効かないです。
const inputElem = document.getElementsByName('input__text')[0];inputElem.maxLength; // 8inputElem.value = 'internationalization';
そもそもHTML機能による制限を取っ払うことは、Webエンジニアにとって朝飯前です。
inputText.removeAttribute('maxlength'); // これで制限がなくなる
見かけ上文字数が足らないケース
「𩸽」(ホッケという魚)などのサロゲートペア文字は、1文字で長さ2文字分という扱いになってします。"𩸽𩸽𩸽𩸽"
だけで8文字扱いなので、フォームの直接入力ではそれ以上文字を追加できません。
inputElem.maxLength; // 8inputElem.value = '𩸽𩸽𩸽𩸽';
文字の中には、全く見えないものもあります。
- ゼロ幅スペース (
"\u200b"
) - 単語結合子 (
"\u2060"
) - ゼロ幅接合子 (
"\u200d"
) - ゼロ幅非接合子 (
"\u200c"
)
しかしながら、見えない文字であっても1つあたり1文字として扱われます。
inputElem.maxLength; // 8inputElem.value = 'abcdefg\u200b';
出力は7文字に見えますが、フォームの直接入力ではそれ以上文字を追加できません。
参考リンク