全角数字を半角に・半角数字を全角に自動変換するテキストエリアを作る方法
全角数字を半角に、半角数字を全角に自動変換するテキストエリアを作る方法を紹介します。このサンプルでは、JavaScriptでテキストエリアへの入力を検知し、上の入力欄では全角数字を半角数字へ、下の入力欄では半角数字を全角数字へリアルタイムで変換します。たとえば「12345」と入力すると「12345」に、「12345」と入力すると「12345」に自動変換されるため、数字の表記を一定の形式にそろえられます。
お問い合わせ画面や会員サイトの登録フォーム、ECサイトの商品情報入力、管理画面のデータ入力など、数字の全角・半角を統一したい場面で利用できます。入力した数字だけが変換対象となり、それ以外の文字を削除する処理は行わないため、文章や記号などが含まれている場合はそのまま残ります。利用者が入力後に数字を一つずつ修正する必要がなく、入力と同時に指定した形式へ変換できるのが特徴です。
HTMLでは「半角数字へ自動変換」「全角数字へ自動変換」のラベルや説明文、プレースホルダーを変更でき、CSSではフォーム全体の横幅、余白、背景色、枠線、角丸、テキストエリアの高さなどを調整できます。画面幅640px以下ではフォーム内の余白を小さくするレスポンシブ設定も行っているため、スマートフォン・タブレット・PCで利用できます。全角と半角それぞれの変換動作を実際に確認できる、数字入力フォームのサンプルとして活用できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
上の入力欄では全角数字を半角に、下の入力欄では半角数字を全角にリアルタイムで変換します。
上のテキストエリアへ全角数字を入力すると半角数字に、下のテキストエリアへ半角数字を入力すると全角数字に自動変換されます。
コードをコピーして使おう!
<!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">
</head>
<body>
<!-- 入力フォーム全体 -->
<div class="number-fullwidth-halfwidth-textarea_wrap">
<!-- タイトル -->
<div class="number-fullwidth-halfwidth-textarea_title">
全角数字・半角数字を自動変換
</div>
<!-- 説明文 -->
<p class="number-fullwidth-halfwidth-textarea_text">
上の入力欄では全角数字を半角に、下の入力欄では半角数字を全角にリアルタイムで変換します。
</p>
<!-- 全角数字を半角数字へ変換するグループ -->
<div class="number-fullwidth-halfwidth-textarea_group">
<!-- 全角数字から半角数字への変換ラベル -->
<label
class="number-fullwidth-halfwidth-textarea_label"
for="halfwidth-textarea">
全角数字 → 半角数字
</label>
<!-- 全角数字を半角数字へ変換するテキストエリア -->
<textarea
id="halfwidth-textarea"
name="halfwidth-textarea"
class="number-fullwidth-halfwidth-textarea_input"
placeholder="全角数字を入力してください 例:1234567890"></textarea>
<!-- 全角数字から半角数字への変換についての補足文 -->
<span class="number-fullwidth-halfwidth-textarea_note">
入力した全角数字が半角数字へリアルタイムで変換されます。
</span>
</div>
<!-- 半角数字を全角数字へ変換するグループ -->
<div class="number-fullwidth-halfwidth-textarea_group">
<!-- 半角数字から全角数字への変換ラベル -->
<label
class="number-fullwidth-halfwidth-textarea_label"
for="fullwidth-textarea">
半角数字 → 全角数字
</label>
<!-- 半角数字を全角数字へ変換するテキストエリア -->
<textarea
id="fullwidth-textarea"
name="fullwidth-textarea"
class="number-fullwidth-halfwidth-textarea_input"
placeholder="半角数字を入力してください 例:1234567890"></textarea>
<!-- 半角数字から全角数字への変換についての補足文 -->
<span class="number-fullwidth-halfwidth-textarea_note">
入力した半角数字が全角数字へリアルタイムで変換されます。
</span>
</div>
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでは、全角数字を半角数字へ変換するテキストエリアと、半角数字を全角数字へ変換するテキストエリアを配置します。CSSではフォーム全体や入力欄の見た目を整え、JavaScriptでは入力された全角数字を半角数字へ、半角数字を全角数字へリアルタイムで変換します。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlは入力フォーム全体を構成するファイルです。「全角数字・半角数字を自動変換」のタイトルと説明文を表示し、「全角数字 → 半角数字」「半角数字 → 全角数字」の2つのテキストエリアを配置しています。それぞれのラベル、プレースホルダー、補足文もHTMLから変更できます。
style.cssはページ全体、フォーム、タイトル、説明文、ラベル、テキストエリア、補足文のデザインを設定するファイルです。フォームの最大横幅や余白、背景色、枠線、角丸、テキストエリアの高さ、文字サイズ、フォーカス時の枠線色などを変更できます。
script.jsは数字の全角・半角を変換するファイルです。「全角数字 → 半角数字」のテキストエリアでは全角数字の文字コードから65248を引き、「半角数字 → 全角数字」のテキストエリアでは半角数字の文字コードへ65248を加えて変換します。数字以外の文字や記号、改行は変換せず、そのまま残ります。
設置方法・使い方
sampleフォルダを作成し、その中へindex.html・style.css・script.jsを配置します。3つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。上側のテキストエリアへ「12345」のような全角数字を入力すると「12345」のような半角数字へ変換され、下側のテキストエリアへ「12345」のような半角数字を入力すると「12345」のような全角数字へ変換されます。入力や貼り付けを行うたびに変換処理が実行されます。
カスタマイズできる内容
index.htmlではページタイトル、フォーム内のタイトル、説明文、「全角数字 → 半角数字」「半角数字 → 全角数字」のラベル、プレースホルダー、補足文を変更できます。電話番号、郵便番号、商品番号、会員番号など、使用する入力内容に合わせて表示する文章を編集できます。
style.cssではページやフォームの背景色、最大横幅、余白、枠線、角丸、テキストエリアの高さ、入力文字のサイズや行間、フォーカス時の枠線色などを変更できます。resize:vertical;では、テキストエリアを上下方向へ手動で高さ変更できるようにしています。
script.jsでは、上側のテキストエリアに入力された全角数字だけを半角数字へ、下側のテキストエリアに入力された半角数字だけを全角数字へ変換しています。HTML側のテキストエリアのIDを変更する場合は、script.jsのgetElementById()に指定しているIDも同じ名前へ変更してください。
数値調整
style.css
padding:40px 20px;
ページ全体の内側余白です。40pxは上下、20pxは左右の余白を表します。値を大きくすると画面端との間隔が広がり、小さくすると狭くなります。
max-width:700px;
フォーム全体の最大横幅です。値を大きくするとフォームを広く表示でき、小さくするとコンパクトになります。
margin:40px auto;
フォーム全体の上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。autoによってフォームを左右中央へ配置します。
padding:32px;
フォーム全体の内側余白です。値を大きくすると内容と外側の枠線との間隔が広がり、小さくすると狭くなります。
border:1px solid #dbe4f0;
フォーム全体の枠線です。1pxを大きくすると枠線が太くなります。#dbe4f0を変更すると枠線の色を変更できます。
border-radius:18px;
フォーム全体の角丸です。値を大きくすると丸みが強くなり、0にすると角丸がなくなります。
margin:0 0 12px;
タイトルの下側余白です。12pxを大きくするとタイトルと説明文の間隔が広がり、小さくすると狭くなります。
font-size:22px;
タイトルの文字サイズです。値を大きくすると文字が大きくなり、小さくすると小さくなります。
line-height:1.5;
タイトルとラベルの行間です。値を大きくすると行間が広がり、小さくすると狭くなります。
margin:0 0 24px;
説明文の下側余白です。24pxを大きくすると説明文と最初の入力項目との間隔が広がり、小さくすると狭くなります。
font-size:16px;
説明文、ラベル、テキストエリアの入力文字に使用する文字サイズです。値を大きくすると文字が大きくなり、小さくすると小さくなります。
line-height:1.8;
説明文の行間です。値を大きくすると行間が広がり、小さくすると狭くなります。
margin-bottom:20px;
2つの入力グループの間隔です。値を大きくすると「全角数字 → 半角数字」と「半角数字 → 全角数字」の入力欄の間隔が広がり、小さくすると狭くなります。
margin-bottom:8px;
ラベルとテキストエリアの間隔です。値を大きくすると間隔が広がり、小さくすると狭くなります。
min-height:140px;
テキストエリアの最低高さです。値を大きくすると入力欄が高く表示され、小さくすると低くなります。
padding:14px 16px;
テキストエリアの内側余白です。14pxは上下、16pxは左右の余白です。値を大きくすると入力文字と枠線との間隔が広がります。
border:2px solid #cbd5e1;
テキストエリアの通常時の枠線です。2pxを大きくすると枠線が太くなります。#cbd5e1を変更すると枠線の色を変更できます。
border-radius:10px;
テキストエリアの角丸です。値を大きくすると丸みが強くなり、0にすると角丸がなくなります。
line-height:1.7;
テキストエリア内の入力文字の行間です。値を大きくすると行間が広がり、小さくすると狭くなります。
transition:border-color 0.3s ease;
テキストエリアを選択したときに枠線色が切り替わる時間です。0.3秒を大きくするとゆっくり変化し、小さくすると速く変化します。
margin-top:8px;
テキストエリアと補足文の間隔です。値を大きくすると間隔が広がり、小さくすると狭くなります。
font-size:14px;
補足文の文字サイズです。値を大きくすると文字が大きくなり、小さくすると小さくなります。
line-height:1.6;
補足文の行間です。値を大きくすると行間が広がり、小さくすると狭くなります。
padding:24px 12px;
画面幅640px以下で使用するページ全体の内側余白です。24pxは上下、12pxは左右の余白です。
margin:24px auto;
画面幅640px以下で使用するフォーム全体の上下余白です。24pxを変更するとスマートフォン表示時の上下間隔を調整できます。
padding:24px 18px;
画面幅640px以下で使用するフォーム全体の内側余白です。24pxは上下、18pxは左右の余白です。
min-height:130px;
画面幅640px以下で使用するテキストエリアの最低高さです。値を変更するとスマートフォン表示時の入力欄の高さを調整できます。
padding:13px 14px;
画面幅640px以下で使用するテキストエリアの内側余白です。13pxは上下、14pxは左右の余白です。
script.js
65248
全角数字と半角数字の文字コードの差として使用している値です。全角数字を半角数字へ変換するときは文字コードから65248を引き、半角数字を全角数字へ変換するときは65248を加えます。変換処理に必要な値のため、通常は変更しません。
レスポンシブ対応
このサンプルはレスポンシブ対応です。フォームにはwidth:100%とmax-width:700pxを設定しているため、広い画面では最大700pxで表示し、狭い画面では利用できる横幅に合わせて縮小します。また、画面幅640px以下ではページとフォームの余白、テキストエリアの最低高さと内側余白を小さくする設定へ切り替わります。
コメント