JavaScriptで文字列内の単語をマスキング(暗号化)する方法
本記事では、JavaScriptを使って文字列中の単語を特定のルールに従って変換・マスキングする方法を解説します。フィルタリングや検閲処理などで役立つテクニックです。
問題の概要
文字列を受け取るJavaScript関数を作成します。この関数は、以下のルールに従って文字列を変換する必要があります。
- すべての単語を大文字にする
- 各単語の末尾に「!!!!」を付ける
- 「a」または「A」は「@」に置き換える
- その他の母音(e、i、o、u)は「*」に置き換える
実装コード
以下が実際のコード例です。
const str = 'ban censored words';
const maskWords = (str = '') => {
let arr = str.split(' ');
const res = [];
for (let i = 0; i < arr.length; ++i) {
let s = (arr[i].toUpperCase() + '!!!!').split('');
for (let j = 0; j < s.length; ++j) {
if (s[j] === 'A')
s[j] = '@';
if (s[j] === 'E' || s[j] === 'I' || s[j] === 'O' || s[j] === 'U')
s[j] = '*';
}
res.push(s.join(''));
};
return res.join(' ');
};
console.log(maskWords(str));コードの解説
この関数の処理の流れは以下のとおりです。
- split(' ')による分割:入力文字列をスペースで区切り、単語ごとの配列を作成します。
- toUpperCase()による大文字化:各単語を大文字に変換し、末尾に「!!!!」を連結した後、1文字ずつの配列に分解します。
- 母音の置き換え:「A」は「@」へ、「E」「I」「O」「U」は「*」へと置き換えます。
- 結合:変換済みの単語を配列に格納し、最後にスペース区切りで連結して結果を返します。
出力結果
B@N!!!! C*NS*R*D!!!! W*RDS!!!!
より簡潔な代替実装
正規表現やmap()メソッドを使うと、より簡潔に書くこともできます。
const maskWordsShort = (str = '') =>
str
.toUpperCase()
.replace(/A/g, '@')
.replace(/[EI OU]/g, '*')
.split(' ')
.map(word => word + '!!!!')
.join(' ');このように、文字列操作の基本メソッドを組み合わせることで、柔軟なマスキング処理を実現できます。用途に応じて、正規表現版とループ版を使い分けるとよいでしょう。
-
JavaScriptで親要素にアクセスする方法【parentNodeプロパティの使い方】
JavaScriptでDOM操作を行っていると、ある要素の親要素にアクセスしたい場面によく出会います。そんなときに活躍するのがparentNodeプロパティです。このプロパティは、対象ノードの直接の親ノードを返します。 本記事では、クリックイベントとparentNodeプロパティを組み合わせて、クリックされた子要素の親要素を取得し、そのクラス名を画面に表示するサンプルコードを紹介します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8&qu
-
JavaScriptのimportで波括弧「{}」を使う理由とは?名前付きエクスポートの基本をわかりやすく解説
JavaScript(ESモジュール)でモジュールを読み込む際、import 文に波括弧 { } を付けるかどうか迷ったことはありませんか?実はこの波括弧は、名前付きエクスポート(named export)を読み込むために必要な記法です。本記事では、実際のコード例を使いながら、{ } の役割と使い方を詳しく解説します。 importで { } を使う場面とは JavaScriptのESモジュールでは、エクスポート方法によって読み込み側の書き方が変わります。 名前付きエクスポート:export { 関数名 } のようにエクスポートされたものを読み込む場合は、import { 名前 } fro