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

JavaScriptで文字列から句読点・特殊文字を削除する方法

問題

文字列を受け取り、その中からすべての句読点や特殊文字を取り除き、結果の文字列には英字と数字だけを残すJavaScript関数を作成する必要があります。

入力

const str = 'th@is Str!ing Contains 3% punctuations';

出力

const output = 'thisStringContains3punctuations';

これは、すべての句読点(記号)と空白を削除したためです。

コード例

以下がその実装例です。

const str = 'th@is Str!ing Contains 3% punctuations';
const removeSpecialChars = (str = '') => {
    let res = '';
    for(let i = 0; i < str.length; i++){
        const el = str[i];
    if(+el){
        res += el;
        }else if(el.toLowerCase() !== el.toUpperCase()){
            res += el;
        };
        continue;
    };
    return res;
};
console.log(removeSpecialChars(str));

出力

thisStringContains3punctuations

コードの仕組み

この関数は、1文字ずつ次のような条件で判定しながら新しい文字列を組み立てています。

  • 数字の判定: +el によって文字列を数値へ変換しています。数字であれば変換結果が真(truthy)になり、その文字は残されます。
  • 英字の判定: el.toLowerCase() !== el.toUpperCase() を利用しています。英字は大文字・小文字の変換で値が変わるためこの条件が成立しますが、記号や空白は変換しても値が変わらないため除外されます。
  • どちらの条件にも該当しない文字(句読点・記号・空白など)は、結果の文字列に追加されずにスキップされます。

なお、この実装には少し注意点があります。+"0" は数値の 0 として評価され偽(falsy)になるため、「0」という文字は意図せず削除されてしまいます。

より簡単な方法:正規表現を使う

実務では、正規表現と replace() メソッドを組み合わせることで、同じ処理をもっと簡潔に書けます。

const str = 'th@is Str!ing Contains 3% punctuations';
const removeSpecialChars = (str = '') => {
    return str.replace(/[^a-zA-Z0-9]/g, '');
};
console.log(removeSpecialChars(str));
// 出力: thisStringContains3punctuations

正規表現 /[^a-zA-Z0-9]/g は「半角英字と数字以外のすべての文字」にマッチするため、それらを空文字に置き換えるだけで特殊文字と空白を一括削除できます。「0」が消えてしまうような落とし穴もなく、可読性・パフォーマンスの両面で優れているため、特別な理由がない限りこちらの方法をおすすめします。

  1. JavaScriptで双方向連結リストの要素を削除する方法

    双方向連結リストから要素を削除する仕組み連結リストからの要素削除は非常にシンプルです。やるべきことは「削除したいノードへの参照を失わせる」こと、つまり対象ノードをリンクのチェーンから切り離すだけです。ただし、削除する位置によって処理が異なるため、次の3つのケースを考慮する必要があります。先頭(head)の要素を削除する: head = head.next と代入するだけで、先頭ノードへの参照は失われ、headは2番目の要素を指すようになります。このとき、新しいheadのprevをnullに設定し、前方向のリンクも忘れずに切っておきます。末尾(tail)の要素を削除する: 後ろから2番目のノード

  2. C#でString.Emptyを使って文字列から空白を削除する方法

    C#では、StringBuilderクラスのReplace()メソッドとString.Emptyを組み合わせることで、文字列内の空白を簡単に削除できます。この記事では、その具体的な手順をサンプルコード付きで解説します。基本的な考え方まず、対象となる文字列をStringBuilderで設定します。StringBuilder str = new StringBuilder(Tom Hanks);次に、Replace()メソッドを使用して、半角スペース( )をString.Empty(空の文字列)に置き換えます。これにより、文字列から空白が取り除かれます。str.Replace( , String.