JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

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));

コードの解説

この関数の処理の流れは以下のとおりです。

  1. split(' ')による分割:入力文字列をスペースで区切り、単語ごとの配列を作成します。
  2. toUpperCase()による大文字化:各単語を大文字に変換し、末尾に「!!!!」を連結した後、1文字ずつの配列に分解します。
  3. 母音の置き換え:「A」は「@」へ、「E」「I」「O」「U」は「*」へと置き換えます。
  4. 結合:変換済みの単語を配列に格納し、最後にスペース区切りで連結して結果を返します。

出力結果

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(' ');

このように、文字列操作の基本メソッドを組み合わせることで、柔軟なマスキング処理を実現できます。用途に応じて、正規表現版とループ版を使い分けるとよいでしょう。

  1. JavaScriptで親要素にアクセスする方法【parentNodeプロパティの使い方】

    JavaScriptでDOM操作を行っていると、ある要素の親要素にアクセスしたい場面によく出会います。そんなときに活躍するのがparentNodeプロパティです。このプロパティは、対象ノードの直接の親ノードを返します。 本記事では、クリックイベントとparentNodeプロパティを組み合わせて、クリックされた子要素の親要素を取得し、そのクラス名を画面に表示するサンプルコードを紹介します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8&qu

  2. JavaScriptのimportで波括弧「{}」を使う理由とは?名前付きエクスポートの基本をわかりやすく解説

    JavaScript(ESモジュール)でモジュールを読み込む際、import 文に波括弧 { } を付けるかどうか迷ったことはありませんか?実はこの波括弧は、名前付きエクスポート(named export)を読み込むために必要な記法です。本記事では、実際のコード例を使いながら、{ } の役割と使い方を詳しく解説します。 importで { } を使う場面とは JavaScriptのESモジュールでは、エクスポート方法によって読み込み側の書き方が変わります。 名前付きエクスポート:export { 関数名 } のようにエクスポートされたものを読み込む場合は、import { 名前 } fro