jQueryで入力文字数カウントをリアルタイムに行う方法

こういう風に文字数カウントをしたい

  • テキストエリア(textarea)の入力時、
  • 入力欄(input)の入力時において、
  • リアルタイムで文字数カウントしたい
  • 半角・全角のどちらにも対応したい

こういう処理もjQueryならとても簡単です。

その方法とかコード例とかを紹介します。

1.jQueryをheader内とかで読み込み

初めにjQuery本体を読み込んでおきます。

▼ 最新のjQueryをCDNから読み込みする

最新のを使っておけば間違いありません。

ここで紹介する方法はjQueryバージョン関係なしです。

2.textare要素とカウント要素を作成

それでは要素から定義していきます。

ここではシンプルにこんな風にしました。

▼ textare要素とカウント要素

▼ 見栄えを良くするためCSS(任意)

▼ このような見た目になる

ここで作成したtextare要素と文字数カウント要素

ここではカウント対象のテキストエリアに #target  というID、カウントされた文字数は #result  の要素に表示することにします。

このIDの付け方は任意です。

3.リアルタイム文字数カウントのコード追加

ここでは次の規則でカウントします。

  • 文字数は String.length  から参照する
  • 入力時点でリアルタイムカウント
  • 半角も全角も1文字としてカウントする

重要なのはString.lengthプロパティについて。

▼ String.length - JavaScript | MDN

このプロパティは、文字列内のコード単位の数を返します。 JavaScript で使用される文字列書式である UTF-16 は、ほとんどの一般の文字は単一の 16 ビットコードユニットで表しますが、あまり使われない文字に対しては 2 つのコードユニットを使用する必要があり、 length で返される値が文字列の実際の文字数と一致しなくなる可能性があります。

引用元 : https://developer.mozilla.org/ja/docs/Web/API/HTMLElement/input_event

大抵の文字では正しいカウントがされます。

ただしあまり使われない非常用で文字……

これは実際の文字数と一致しないことがある模様です。

ASCII+日本語ならほぼ問題ではないけど、
一応留意しておいた方がいいかもしれません。

 

ということで実際のJavaScriptコードです。

▼ リアルタイムカウントするコード例

テキストエリアでinputイベントを監視してます。

そうすればリアルタイムでカウントが可能です。

▼ inputイベント発生のタイミング

  • 半角・全角の文字入力・変更時
  • IMEによる全角文字の入力途中
  • IMEでの変換途中でも反映される

もしinputイベントではなくchangeイベントを使った場合、IMEの入力途中・変換途中には対応できません。全角もリアルタイムカウントするためにinputイベントにしてます。

4.空白・改行を含めないで文字数カウント

少しだけ改良してみます。

空白・改行を含めないで文字数カウント

先ほどのコードを少しだけ改変するだけです。

▼ さっきのコードを少しだけ変更

こういう処理は正規表現するのが一番ですね。

以下の空白文字はカウントから除外されます。

  • 半角スペース
  • タブスペース
  • 改行コード(CR/LF)

文字数カウントには使えるテクかもしれない

こんな風にリアルタイムカウントできる(gif)

次みたいに文字数のリアルタイムカウントができます。

このgif動画のように半角・全角関係なくリアルタイム文字数カウントができる。IME入力時も同様

単純にinput・textarea要素の文字数を参照してるだけ

ただしリアルタイムで文字数カウントしたいので、
監視するのはinputイベントであることが肝心な所です。

それからIME入力時でもしっかりカウント可能です。

テキストエリア(textarea)の関連記事とか

ついでにテキストエリアの関連記事です。

▼ jQueryで自動リサイズする textarea を数行で実装

▼ jQueryでtextareaの入力をバイト数で制限

カスタマイズに使えると思います。

良ければご覧ください。