【JavaScript】文字列内の大文字と小文字を反転させる方法
本記事では、文字列を受け取り、含まれるすべての大文字を小文字に、小文字を大文字に変換した新しい文字列を生成するJavaScript関数の実装方法を解説します。この処理は「ケースの反転(case flipping)」と呼ばれ、文字コードの仕組みを理解するのに絶好の題材です。
実装のアプローチ
ASCIIコードでは、大文字のアルファベットは65〜90、小文字は97〜122という連続した範囲に割り当てられており、両者の差は常に32です。この性質を利用すると、各文字のコードに32を加算または減算するだけで、大文字と小文字を相互に変換できます。
それでは、実際のコードを見てみましょう。
サンプルコード
const str = 'The Case OF tHis StrinG Will Be FLiPped';
// 大文字かどうかを判定(A〜Z:コード65〜90)
const isUpperCase = char => char.charCodeAt(0) >= 65 && char.charCodeAt(0) <= 90;
// 小文字かどうかを判定(a〜z:コード97〜122)
const isLowerCase = char => char.charCodeAt(0) >= 97 && char.charCodeAt(0) <= 122;
const flipCase = str => {
let newStr = '';
const margin = 32; // 大文字と小文字のコード差
for (let i = 0; i < str.length; i++) {
const curr = str[i];
if (isLowerCase(curr)) {
// 小文字 → 大文字へ変換
newStr += String.fromCharCode(curr.charCodeAt(0) - margin);
} else if (isUpperCase(curr)) {
// 大文字 → 小文字へ変換
newStr += String.fromCharCode(curr.charCodeAt(0) + margin);
} else {
// アルファベット以外はそのまま追加
newStr += curr;
}
}
return newStr;
};
console.log(flipCase(str));
実行結果
コンソールへの出力は以下のとおりです。
tHE cASE of ThIS sTRINg wILL bE flIpPED
コードのポイント
- charCodeAt():指定位置の文字のUTF-16コードユニット(ここではASCIIコード)を数値として取得します。
- String.fromCharCode():数値から対応する文字を生成します。逆方向の変換に使用します。
- margin(差分32):小文字なら32を引いて大文字に、大文字なら32を足して小文字に切り替えます。
- 数字や記号、空白などアルファベット以外の文字は、そのまま元の文字列に追加されます。
より簡潔な代替手段
なお、ASCIIコードを意識しない場合は、標準メソッドを組み合わせて以下のように書くこともできます。こちらの方が可読性が高く、実務ではよく使われます。
const flipCaseSimple = str => [...str]
.map(c => c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase())
.join('');
ただし、この方法はUnicodeの全角文字なども対象になる点に注意してください。厳密に半角英字のみを扱いたい場合は、冒頭のcharCodeAtを使った実装が適しています。
-
バニラJavaScriptで文字列を大文字・小文字に変換する方法
JavaScriptのStringオブジェクトには、文字列を大文字や小文字に変換できる便利なメソッドが標準で用意されています。外部ライブラリを使わないバニラJavaScriptだけで、toUpperCase()とtoLowerCase()という2つのメソッドを呼び出すだけで簡単に実現できます。 toUpperCase() – 文字列を大文字に変換する toUpperCase()は、文字列内のすべての英字を大文字に変換した新しい文字列を返します。元の文字列は変更されません。 コード例 let str = Hello World; let upper = str.toUpperCase(); co
-
JavaScriptのTextEncoderとTextDecoderとは?文字列とバイト列の相互変換をわかりやすく解説
JavaScriptでは、文字列とバイト列(バイナリデータ)を相互に変換したい場面がよくあります。そんなときに活躍するのが、TextEncoderとTextDecoderという2つの標準組み込みAPIです。本記事では、それぞれの役割と基本的な使い方を、実際に動くサンプルコードとともに解説します。 TextEncoderとは TextEncoderは、指定した文字列をUTF-8形式に変換(エンコード)するためのオブジェクトです。encode()メソッドに文字列を渡すと、変換結果がUint8Array(符号なし8ビット整数の配列)として返されます。 TextDecoderとは TextDecod