web-dev-qa-db-ja.com

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

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

たとえば、abc's test#sabcs testsとして出力されます。

101
nithi

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

var str = "abc's test#s";
alert(str.replace(/[^a-zA-Z ]/g, ""));
252
Petar Ivanov

削除したい文字を指定してそれを行うことができます:

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

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

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

最初の解決策は、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:あいまい検索で作業していたときに元のソリューションに来ました。検索機能を実装するために特殊文字を削除しようとする場合、より良いアプローチがあります。 文字変換ライブラリ を使用すると、ラテン文字のみから文字列が生成され、単純な正規表現は特殊文字を削除するすべての魔法を実行します。 (これは中国語でも機能します。また、Tromsø == Tromsoを作成することにより、副次的なメリットが得られます)。

25
Seagull

JavaScriptを知りませんが、正規表現を使用することはできませんか?

[^\w\d\s]のようなものは、数字、文字、空白以外のものに一致します。 JavaScriptで構文を見つけるのは単なる質問です。

9
Thiago Moraes

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 '';
}
8
Mozfet

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

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

ドット(。)は特別とは見なされません。 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
hassanf1