it-swarm.com.de

Entfernen Sie alle Sonderzeichen mit RegEx

Ich möchte ein RegExp, das alle Sonderzeichen aus einer Zeichenfolge entfernt. Ich versuche so etwas, aber es funktioniert nicht in IE7, obwohl es in Firefox funktioniert.

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

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

Hilfreich wäre auch eine ausführliche Beschreibung des RegExp.

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

Wie in den Kommentaren erwähnt, ist es einfacher, dies als Whitelist zu tun - ersetzen Sie die Zeichen, die nicht in Ihrer SafeList enthalten.

Das Caret (^) Zeichen ist die Negation der Menge [...], gi sagen global und ohne Berücksichtigung der Groß-/Kleinschreibung (letzteres ist ein bisschen überflüssig, aber ich wollte es erwähnen) und die Listen sicherer Adressen in diesem Beispiel sind Ziffern, Wortzeichen, Unterstriche (\w) und Leerzeichen (\s).

561
annakata

Beachten Sie, dass Sie folgende Aktionen ausführen können, wenn Sie dennoch eine Gruppe ausschließen möchten, z. B. Schrägstriche und Sonderzeichen:

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

beachten Sie insbesondere, dass Sie, um auch das Minuszeichen einzuschließen, es mit einem Backslash wie die letztere Gruppe maskieren müssen. Wenn Sie dies nicht tun, wird auch 0-9 ausgewählt, was wahrscheinlich unerwünscht ist.

87
noinput

Einfacher Javascript-Regex verarbeitet keine Unicode-Buchstaben .

Verwende nicht [^\w\s] entfernt dies Buchstaben mit Akzenten (wie àèéìòù), ganz zu schweigen von kyrillischen oder chinesischen, Buchstaben aus solchen Sprachen werden vollständig entfernt.

Sie möchten diese Buchstaben wirklich nicht zusammen mit allen Sonderzeichen entfernen. Sie haben zwei Chancen:

  • Fügen Sie in Ihre Regex alle Sonderzeichen ein, die Sie nicht entfernen möchten.
    beispielsweise: [^èéòàùì\w\s].
  • Schauen Sie sich xregexp.com an. XRegExp fügt Basisunterstützung für den Unicode-Abgleich über das \p{...} Syntax.
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>
19
freedev

Die erste Lösung funktioniert nicht für UTF-8-Alphabete. (Es wird Text wie Їжак abgeschnitten). Ich habe es geschafft, eine Funktion zu erstellen, die RegExp nicht verwendet und eine gute UTF-8-Unterstützung in der JavaScript-Engine verwendet. Die Idee ist einfach, wenn ein Symbol in Groß- und Kleinbuchstaben gleich ist und ein Sonderzeichen ist. Die einzige Ausnahme gilt für Leerzeichen.

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

Update: Bitte beachten Sie, dass diese Lösung nur für Sprachen mit Klein- und Großbuchstaben funktioniert. In Sprachen wie Chinesisch funktioniert dies nicht.

Update 2: Ich bin zur ursprünglichen Lösung gekommen, als ich an einer Fuzzy-Suche gearbeitet habe. Wenn Sie auch versuchen, Sonderzeichen zu entfernen, um die Suchfunktion zu implementieren, gibt es einen besseren Ansatz. Verwenden Sie eine beliebige Transliterationsbibliothek , mit der Sie Zeichenfolgen nur aus lateinischen Zeichen erstellen können, und die einfache Regexp-Funktion entfernt Sonderzeichen auf magische Weise. (Dies funktioniert auch für Chinesen, und Sie erhalten auch zusätzliche Vorteile, indem Sie Tromsø == Tromso).

7
Seagull

Ich benutze RegexBuddy zum Debuggen meiner regulären Ausdrücke, es hat fast alle Sprachen, die sehr nützlich sind. Dann kopieren/einfügen für die Zielsprache. Tolles Werkzeug und nicht sehr teuer.

Also habe ich deine Regex kopiert/eingefügt und dein Problem ist, dass [] Sonderzeichen in Regex sind, also musst du sie maskieren. Die Regex sollte also sein: /[email protected]#$^&%*()+=-[\x5B\x5D weibl

1
millebii

str.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "") So habe ich es gemacht. Aber es gibt einige Leute, die es viel einfacher gemacht haben, wie str.replace(/\W_/g,"");

1
Eldar Mammadov

warum tust du nicht so etwas wie:

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

um zu überprüfen, ob Ihre Eingabe Sonderzeichen enthält

0
AnD