全角と半角の変換(英数字)



全角と半角の変換についてみていきたいと思います。

まずは、その際に必要となる基礎項目を説明します。

1.文字列.replace( xxx , yyy)


文字列に含まれる「xxx」の文字を、「yyy」に置き換えます。

例えば、

 let ss = ‘abcabcab’;

 ss = ss.replace(‘a’, ‘あ’);

とやると、ssは「あbcabcab」となります。

「a」の文字が3個あるうち、最初の1個だけが変換されます。

3個とも変換するには、どうするか?

replaceの中の「xxx」の部分を次のように書きます。

ss = ss.replace(/a/g, ‘あ’);

すると、ssは「あbcあbcあb」となります。

最初にあった 「文字列.replace( xxx , yyy)」 の「xxx」の部分を、

「’a’」とすると最初のaだけが変換され、

「/a/g」とすると全てのaが変換されます。

変換したい文字「a」を「/」で囲んで下さい。

それの後に「g」を付けます(gはグローバルのgです)。

例えば、

ss = ss.replace(‘abc’, ‘あ’);

と「xxx」の部分を「’abc’」とすると、最初のabcだけが「あ」に変換され、

ssは「あabcab」となります。

ss = ss.replace(/abc/g, ‘あ’);

と「xxx」の部分を「/abc/g」とすると、全てのabcだけが「あ」に変換され、

ssは「ああab」となります。

また、引数の2個目の「yyy」の部分は、関数を指定することができます。

「g」をつけた場合、「xxx」の部分に指定した文字の分だけ関数が読み込まれます。

複数の文字があれば、その分だけ読み込まれます。

例えば、

 ss = ‘abcabcab’;

 ss = ss.replace(/a/g, aaa(‘あいう’));

function aaa(str) { return ‘えお’; }

とした時、ssは「えおbcえおbcえおb」となります。

また、「xxx」に指定する文字は正規表現という表記を使用することができます。



2.正規表現


他の分野でもよく聞く単語ですが、JavaScriptの表記も具体的にみてみます。

まずは、1の中ででてきた「/abc/」のように、「/(スラッシュ)」で囲むのが基本です。

次に、よくみかけるパターンとして、

/[A-Z]/ 半角で大文字のAからZまで

/[a-z]/ 半角で小文字のaからzまで

/[0-9]/ 半角で数字の0から9まで

のパターンがあります。これらを混ぜて、

/[A-Za-z0-9]/と記載することもあります。

また、これの全角のパターンもあります(「/[A-Za-z0-9]/」)。

これもたまに見ますが関連項目として、

[ァ-ン゙゚] 半角カタカナでバビブベボやパピプペポへの対応も含む

があります。

あと3パターンほど覚えておくとはかどります。


「+」 直前の文字の1回以上の繰り返しにマッチ

 「/ab+/」は、「ab」や「abb」などにマッチします。


「^」 行の先頭にマッチ

 「/^a/」は、「cba」にはマッチしないが「abc」にはマッチする。

「$」 行の末尾にマッチ

 「/a$/」は、「abc」にはマッチしないが「cba」にはマッチする。



3.String.fromCharCode(数字)



一言でいうと、Unicodeの値から、文字への変換を行います。

何のことやらサッパリと思う人もいると思いますが、例えば、

ss = String.fromCharCode(55);

とやると、ssは「7」となります。

ss = String.fromCharCode(56);

とやると、ssは「8」となります。

だからどうした?となりそうですが、これは次の3番目の項目と合わせて、

力を発揮するものとなります。

Unicodeの一覧表は、次のリンクにあるので、興味があればご覧下さい。

Unicode一覧表


4.文字列.charCodeAt(インデックス)



「文字列」の「インデックス」番目のUnicodeを取得します。

例えば、

 let ss = ‘abcdefg’;

 let n1 = ss.charCodeAt(0);

 let n2 = ss.charCodeAt(1);

 let n3 = ss.charCodeAt(2);

とすると、「n1」は「ss」の「インデックス0」の文字の文字コードを返します。

※ここでは「a」の文字コード「97」です。

同様に、「n2」は「ss」の「インデックス1」の文字の文字コードを返します。

※ここでは「b」の文字コード「98」です。

同様に、「n3」は「ss」の「インデックス2」の文字の文字コードを返します。

※ここでは「c」の文字コード「99」です。


5.完成形


文字コードの感覚が一定の部分を利用し、数字とアルファベットの全角と半角の変換を作成します。

//半角を全角にする

function han_Zen(ss) {

 return ss.replace(/[A-Za-z0-9]/g, function (s) { return stringFromCode(s, 65248) });

}

//全角を半角にする

function zen_Han(ss) {

 return ss.replace(/[A-Za-z0-9]/g, function (s) { return stringFromCode(s, -65248) });

}

function stringFromCode(s, pls) {

 return String.fromCharCode(s.charCodeAt(0) + pls);

}

呼び出し元は適当に、

 let ss = ‘123ab’;

 ss = han_Zen(ss);

 alert(ss);

 ss = zen_Han(ss);

 alert(ss);

という感じでよいと思います。





システム開発のためのJavaScriptプログラミングに戻る



ひらがなとカタカナはこちら。



system-development