web-dev-qa-db-ja.com

RegExですべての特殊文字を削除する

文字列からすべての特殊文字を削除するRegExpが欲しいのですが。私はこのようなことを試みていますが、Firefoxでは機能しますが、IE7では機能しません。

var specialChars = "!@#$^&%*()+=-[]\/{}|:<>?,.";

for (var i = 0; i < specialChars.length; i++) {
  stringToReplace = stringToReplace.replace(new RegExp("\\" + specialChars[i], "gi"), "");
}

RegExpの詳細な説明も役に立ちます。

200
Timothy Ruhle
var desired = stringToReplace.replace(/[^\w\s]/gi, '')

コメントで述べたように、これをホワイトリストとして行う方が簡単です - あなたのセーフリストにないではない文字を置き換えてください。

キャレット(^)文字は集合[...]の否定であり、giは大域的で大文字と小文字を区別しない(後者は少し冗長ですが、私はそれを言及したいと思います)そしてこの例のセーフリストは数字、Word文字、アンダースコア(\w)です)と空白(\s)。

552
annakata

スラッシュや特殊文字のようなものも含めて、まだセットを除外したい場合は、次のようにすることができます。

var outString = sourceString.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '');

「マイナス」文字も含めるには、後者のグループのようにバックスラッシュでエスケープする必要があることに注意してください。そうでない場合は、0-9を選択しますが、これはおそらく望ましくありません。

86
noinput

プレーンJavascriptの正規表現はUnicode文字を処理しません。

[^\w\s]を使用しないでください。これはアクセント記号付きの文字(àèéìòùなど)を削除します。キリル文字や中国語はもちろんのこと、そのような言語からの文字も削除されます。

あなたは本当にこれらの文字をすべての特殊文字と一緒に削除したくはありません。 2つの可能性があります。

  • 削除したくない特殊文字をすべて正規表現に追加してください。
    例:[^èéòàùì\w\s].
  • xregexp.com をご覧ください。 XRegExpは\p{...}構文を通してUnicodeマッチングのための基本サポートを追加します。
var str = "Їжак::: résd,$%& adùf"
var search = XRegExp('([^?<first>\\pL ]+)');
var res = XRegExp.replace(str, search, '',"all");

console.log(res); // returns "Їжак::: resd,adf"
console.log(str.replace(/[^\w\s]/gi, '') ); // returns " rsd adf"
console.log(str.replace(/[^\wèéòàùì\s]/gi, '') ); // returns " résd adùf"
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.1.1/xregexp-all.js"></script>
18
freedev

最初の解決策は、どの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:あいまい検索に取り組んでいたとき、私は最初の解決策を見つけました。検索機能を実装するために特殊文字も削除しようとしている場合は、もっと良い方法があります。ラテン文字からのみ文字列を生成するany 音訳ライブラリ を使用すると、単純な正規表現で特殊文字を削除することができます。 (これは中国語でも動作しますし、Tromsø == Tromsoを作成することで副次的な利益も得られます)。

7
Seagull

私はRegexBuddyを使って私の正規表現をデバッグしています。それはほとんどすべての言語に非常に便利です。ターゲット言語のコピー/貼り付けよりも。素晴らしいツールとそれほど高価ではありません。

それで、私はあなたの正規表現をコピーして貼り付けました、そしてあなたの問題は[、]が正規表現の中の特殊文字であるということです、あなたはそれらをエスケープする必要があります。そのため、正規表現は/!@#$^&%*()+=-[\x5B\x5D]\/{}|:<>?,./imになります。

1
millebii

str.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "")私はこんな感じでした。しかし、str.replace(/\W_/g,"");のようにもっと簡単にした人もいます。

1
Eldar Mammadov

なぜあなたはこんなことをしないでください。

re = /^[a-z0-9 ]$/i;
var isValid = re.test(yourInput);

入力に特殊文字が含まれているかどうかを確認する

0
AnD