テキストボックスの全角・半角スペースを自動削除する方法

テキストボックス
無料ツール
テキストボックスを自由に作成

1行入力・複数行入力の切り替えや、ラベル・プレースホルダー・サイズ・色・余白・枠線などを設定して、HTML・CSSを自動生成できます。

テキストボックス作成ツールを使う
新しいタブで開きます

テキストボックスに入力された全角スペースと半角スペースを、自動的に削除する方法を紹介します。スペースキーを押しても空白がすぐに取り除かれるため、スペースを入力できないような動作になります。

キーボードからの入力だけでなく、コピー&ペーストにも対応しています。例えば「山田 太郎」や「山田 太郎」と入力・貼り付けすると、どちらも「山田太郎」に変わります。文字列の先頭や末尾、途中にあるスペースもすべて削除されます。メールアドレスや会員IDなど、空白を含めずに入力してほしい項目に便利です。

日本語入力中は変換操作を妨げず、文字が確定した後にスペースを削除します。スペース以外の文字や記号は変更されず、処理後の文字列は入力欄の値として取得できます。今回はテキストフィールドを使用し、テキストエリアへの変更方法も紹介します。

デモ

半角・全角スペースを入力すると、その場で自動的に削除されるため、スペースキーが無効になっているように動作します。コピー&ペーストした文章に含まれるスペースも自動削除されます。日本語入力中の変換操作は妨げず、文字の確定後に処理します。スペース以外の文字や記号はそのまま残ります。テキストエリアで使用したい場合は、下記の「ファイル構成と設置方法」を参考にしてください。

コードをコピーして使おう!

<!DOCTYPE html>
<html lang="ja">
<head>
  <!-- 文字コードの設定 -->
  <meta charset="UTF-8">
  <!-- スマートフォンなどの画面幅に対応 -->
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <!-- ページタイトル -->
  <title>全角・半角スペースを自動削除するテキストボックス</title>
  <!-- テキストボックスのCSSを読み込む -->
  <link rel="stylesheet" href="style.css">
  <!-- スペースを自動削除するJavaScriptを読み込む -->
  <script src="script.js" defer></script>
</head>
<body>
  <!-- テキストボックス全体の横幅を制御する親要素 -->
  <div class="textbox-space-auto-remove_container">
    <!-- 入力欄のラベル -->
    <label class="textbox-space-auto-remove_label" for="textbox-space-auto-remove-field">
      文字を入力してください
    </label>
    <!-- 全角・半角スペースを自動削除する入力欄 -->
    <input
      class="textbox-space-auto-remove_input"
      type="text"
      id="textbox-space-auto-remove-field"
      name="textbox-space-auto-remove-field"
      placeholder="例:山田 太郎"
      autocomplete="off"
    >
  </div>
</body>
</html>
コードについて 本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。 免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。

コードをコピーする場合 使用するコードのタブを選び、「このタブをコピー」をクリックすると、現在表示中のコードをコピーできます。 サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
A

Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。

InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。

ファイル構成と設置方法

このサンプルは、HTML・CSS・JavaScriptの3つのファイルで構成されています。入力欄に全角・半角スペースが含まれると、JavaScriptが自動的に削除します。キーボード入力とコピー&ペーストの両方に対応しており、日本語入力中の変換操作も妨げません。

sample/
├── index.html
├── style.css
└── script.js

各ファイルの役割
index.htmlには、入力欄のラベルとテキストフィールドを配置しています。style.cssでは入力欄の横幅・余白・枠線・フォーカス時の表示を設定し、script.jsでは全角・半角スペースの削除とカーソル位置の調整を行います。

設置方法・使い方
「サンプル一式をダウンロード」からZIPファイルを保存して展開すると、sampleフォルダ内に3つのファイルが入っています。ファイルを同じ階層に配置したままindex.htmlをブラウザで開いてください。入力欄にスペースを含む文字列を入力したり、貼り付けたりすると、全角・半角スペースが自動的に削除されます。

全角・半角スペースを削除する仕組み

script.jsでは、replace()を使用して入力された文字列からスペースを取り除いています。次のコードにある[ \u3000]は、半角スペースと全角スペースを表し、gは文字列全体を対象にする指定です。

// スペース削除後の文字列を作成
const cleanedValue = value.replace(/[ \u3000]/g, "");

この処理によって、文字列の先頭・途中・末尾にあるスペースがすべて削除されます。半角スペースだけを削除したい場合は/ /g、全角スペースだけを削除したい場合は/\u3000/gに変更できます。

日本語入力とカーソル位置の制御

日本語入力では、漢字への変換候補を選択するときにもスペースキーを使用します。そのため、script.jsではevent.isComposingを確認し、変換中はスペースの削除を行わないようにしています。

// キーボード入力・貼り付け時に処理する
input.addEventListener("input", function(event) {
  // 日本語入力の変換中は処理しない
  if (event.isComposing) {
    return;
  }

  removeSpaces();
});

// 日本語入力の確定後に処理する
input.addEventListener("compositionend", removeSpaces);

通常の入力や貼り付けではinputイベントによってスペースを削除し、日本語入力の確定後にはcompositionendイベントで処理します。これにより、文字の変換操作を妨げずにスペースを取り除けます。

また、入力欄の途中に文字を追加した場合でも、カーソルが末尾へ移動しないようにしています。selectionStartとselectionEndで元の選択範囲を取得し、スペースを削除した後の文字数に合わせて位置を調整します。

// カーソルより前のスペース数を考慮する
const newStart = value.slice(0, start).replace(/[ \u3000]/g, "").length;
const newEnd = value.slice(0, end).replace(/[ \u3000]/g, "").length;

// スペースを削除した文字列に置き換える
input.value = cleanedValue;

// カーソル位置と選択範囲を維持する
input.setSelectionRange(newStart, newEnd);

入力された文字列を取得する方法

スペースを削除した後の文字列は、テキストフィールドのvalueプロパティから取得できます。例えば、次のコードをscript.js内で実行すると、入力欄の現在の値をvalue変数に代入できます。

// 入力欄から現在の文字列を取得する
const value = document.getElementById("textbox-space-auto-remove-field").value;

このコードは値の取得方法を示す例であり、掲載しているscript.jsへ追加する必要はありません。実際に使用する場合は、入力欄に文字が入力された後や、フォームの送信時など、値が必要なタイミングで実行してください。取得した文字列は、入力内容の確認や別のJavaScript処理などに利用できます。

テキストエリアで使用する方法

複数行の文章を入力できるテキストエリアでも、同じスペース削除処理を使用できます。変更するのはindex.htmlの入力欄部分で、input要素をtextarea要素に置き換えます。idとclassを変更しなければ、script.jsはそのまま使用できます。

変更前:テキストフィールド

<input
  class="textbox-space-auto-remove_input"
  type="text"
  id="textbox-space-auto-remove-field"
  name="textbox-space-auto-remove-field"
  placeholder="例:山田 太郎"
  autocomplete="off"
>

変更後:テキストエリア

<textarea
  class="textbox-space-auto-remove_input"
  id="textbox-space-auto-remove-field"
  name="textbox-space-auto-remove-field"
  rows="5"
  placeholder="文章を入力してください"
></textarea>

rows="5"は、テキストエリアの表示行数を指定しています。数値を大きくすると入力欄が縦に広がり、小さくすると狭くなります。テキストエリアでは、全角・半角スペースだけが削除され、Enterキーで入力した改行はそのまま残ります。

さらに、style.cssの.textbox-space-auto-remove_inputへ次の指定を追加すると、テキストエリアの高さを変更する操作を縦方向のみに制限できます。

resize: vertical; /* テキストエリアの高さだけを変更できるようにする */

テキストエリアの入力値も、テキストフィールドと同じようにvalueプロパティから取得できます。改行を含む文章の場合は、改行を保持した文字列として取得されます。

レスポンシブ対応

style.cssでは、入力欄を囲む.textbox-space-auto-remove_containerにwidth: 100%とmax-width: 480pxを指定しています。通常は最大480pxの横幅で表示され、画面幅が狭い場合は親要素に合わせて縮小されます。max-widthの数値を大きくすると入力欄が広がり、小さくすると狭くなります。

.textbox-space-auto-remove_container {
  width: 100%; /* 設置先の横幅に合わせて表示する */
  max-width: 480px; /* 最大横幅。大きくすると入力欄が横に広がる */
  margin: 0 auto; /* 上下の余白は0。左右中央に配置する */
  box-sizing: border-box; /* 余白や枠線を横幅に含める */
}

また、画面幅が640px以下になると、入力欄の内側余白を16pxから14pxへ変更します。これにより、スマートフォンでは入力欄の高さを少し抑えた表示になります。640pxの数値を変更すると、余白が切り替わる画面幅を調整できます。

@media (max-width: 640px) {

  /* 画面幅640px以下の入力欄 */
  .textbox-space-auto-remove_input {
    padding: 14px; /* 内側の余白。スマートフォン表示時の高さを調整する */
  }

}

この設定はテキストフィールドとテキストエリアの両方に適用されるため、入力欄をテキストエリアへ変更した場合も、PC・タブレット・スマートフォンの画面幅に合わせて表示できます。


こちらもおすすめ


コメント