全角と半角の変換についてみていきたいと思います。
まずは、その際に必要となる基礎項目を説明します。
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の一覧表は、次のリンクにあるので、興味があればご覧下さい。
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プログラミングに戻る
ひらがなとカタカナはこちら。