JavaScriptを使用して文字列からスペースを除くすべての特殊文字を削除します


157

JavaScriptを使用して、文字列からスペース以外のすべての特殊文字を削除したい。

たとえば、 abc's test#s として出力する必要があります abcs tests


3
特殊文字をどのように定義しますか?
キースアーウィン

回答:


349

単一の正規表現では、文字列置換関数を使用する必要があります。特殊文字と仮定すると、文字ではないものを意味します。解決策は次のとおりです。

const str = "abc's test#s";
console.log(str.replace(/[^a-zA-Z ]/g, ""));


5
非ラテンアルファベットに、このソリューションを使用するには、確認してください、この答えを外に
efkan

これにより、数字も削除されます。
tech_geek

15
@tech_geekできることstr.replace(/[^a-zA-Z0-9]/g, "")
Williams

2
実際には、このstr.replace(/[^a-zA-Z0-9 ]/g, "");通知が必要です。0〜9と]の間にスペースがあります
Ammar Shah

多少の調整が必要です。/または-文字が削除されておらず、キャメルケースの最初の文字は小文字であるはずですが、これは大文字です。
Sansun

133

削除する文字を指定して実行できます。

string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');

または、数字と文字以外のすべての文字を変更するには、次を試してください:

string = string.replace(/[^a-zA-Z0-9]/g, '');

4
これを使用してスペースを削除したくない場合はどうなりますか?/[^a-zA-Z0-9]/g
aadi1295 2015年

8
スペースを確保するための@ArbazAbidは、ホワイトリストの文字に追加するだけです。あなたの正規表現は "/ [^ a-zA-Z0-9] / g"(9の後の空白に注意)
Crhistian Ramirez

1
これは、スペースが必要な場合に機能する答えでした。
ネイサン

この置き換え()whitespaces文字列で.text().replace(/[ ()]/g, '')
CアロンソCオルテガ

30

最初のソリューションは、UTF-8アルファベットでは機能しません。(これはПривітなどのテキストをカットします)。RegExpを使用せず、JavaScriptエンジンで適切なUTF-8サポートを使用する関数を作成できました。記号が大文字と小文字で等しい場合、それは特殊文字です。唯一の例外は空白です。

function removeSpecials(str) {
    var lower = str.toLowerCase();
    var upper = str.toUpperCase();

    var res = "";
    for(var i=0; i<lower.length; ++i) {
        if(lower[i] != upper[i] || lower[i].trim() === '')
            res += str[i];
    }
    return res;
}

更新:このソリューションは、大文字が小文字である言語でのみ機能することに注意してください。中国語などの言語では、これは機能しません。

更新2:あいまい検索で作業していたときに元のソリューションにたどり着きました。検索機能を実装するために特殊文字も削除しようとする場合は、より良い方法があります。ラテン文字のみから文字列を生成する文字変換ライブラリを使用すると、単純なRegexpが特殊文字を削除する魔法をすべて実行します。(これは中国語でも機能し、Tromsø== を作成することで副次的なメリットも得られますTromso)。


この非常に独創的な解決策をありがとう。私たちの多くは "Привіт"や "æøå"特殊文字を考慮していないため、これは言語が実際にどのように機能するかとはるかに一致しています。そこにあるほとんどの解決策は、英語のアルファベットの一部ではない文字をカットします。
Alex Langberg、2015年

1
私にはほぼ完璧な答えですが、残念ながら漢字は特殊文字と見なされています。
Eric Majerus

@EricMajerusとヒンディー語も
プログラマー、

注意してください、これも数字を特殊文字と見なします。
just_user 2018


8

Seagulの非常にクリエイティブなソリューションを試してみましたが、数字が特殊文字としても扱われ、私のニーズに合わないことがわかりました。これがSeagulのソリューションの私の(フェイルセーフ)調整です...

//return true if char is a number
function isNumber (text) {
  if(text) {
    var reg = new RegExp('[0-9]+$');
    return reg.test(text);
  }
  return false;
}

function removeSpecial (text) {
  if(text) {
    var lower = text.toLowerCase();
    var upper = text.toUpperCase();
    var result = "";
    for(var i=0; i<lower.length; ++i) {
      if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '')) {
        result += text[i];
      }
    }
    return result;
  }
  return '';
}

reg最初の関数で宣言するのを忘れました。
Noman Ali、

6

すべて検索しない(単語文字||スペース):

str.replace(/[^\w ]/, '')

1

これを使ってみてください

var result= stringToReplace.replace(/[^\w\s]/gi, '')

ここ^カラットは否定用です\ w [a-zA-Z0-9_]単語文字用\ sはスペース用/ [] / giはグローバル用


0

ドット(。)は特別とは見なされません。私はMozfetとSeagullの答えにOR条件を追加しました:

function isNumber (text) {
      reg = new RegExp('[0-9]+$');
      if(text) {
        return reg.test(text);
      }
      return false;
    }

function removeSpecial (text) {
  if(text) {
    var lower = text.toLowerCase();
    var upper = text.toUpperCase();
    var result = "";
    for(var i=0; i<lower.length; ++i) {
      if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '') || (lower[i].trim() === '.')) {
        result += text[i];
      }
    }
    return result;
  }
  return '';
}

0

const input = `#if_1 $(PR_CONTRACT_END_DATE) == '23-09-2019' # 
Test27919<alerts@imimobile.com> #elseif_1 $(PR_CONTRACT_START_DATE) ==  '20-09-2019' #
Sender539<rama.sns@gmail.com> #elseif_1 $(PR_ACCOUNT_ID) == '1234' #
AdestraSID<hello@imimobile.co> #else_1#Test27919<alerts@imimobile.com>#endif_1#`;
const replaceString = input.split('$(').join('->').split(')').join('<-');


console.log(replaceString.match(/(?<=->).*?(?=<-)/g));


-11

文字列から削除したい特殊文字のリスト、それらのリストを作成してから、javascript replace関数を使用してすべての特殊文字を削除します。

var str = 'abc'de#;:sfjkewr47239847duifyh';
alert(str.replace("'","").replace("#","").replace(";","").replace(":",""));

または、文字列全体に対してループを実行し、単一の1文字をASCIIコードと比較して、新しい文字列を再生成できます。


9
いいえ、しないでください。それは本当にひどく遅いです。正規表現を使用する方がはるかに優れています。
キースアーウィン

このソリューションは、1文字だけを置き換える場合に非常に便利です。私の場合、それは役に立ちました、ありがとう。
Vahid Najafi 2016年

replaceメソッドを何度も使用する代わりに、正規表現のみを使用して1回だけ使用してください。
FAISAL
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.