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 = "!@#$^&%*()+=-[]\/{}|:<>?,.";
for (var i = 0; i < specialChars.length; i++) {
stringToReplace = stringToReplace.replace(new RegExp("\\" + specialChars[i], "gi"), "");
}
Eine detaillierte Beschreibung des RegExp wäre ebenfalls hilfreich.
javascript
regex
special-characters
Timothy Ruhle
quelle
quelle
Antworten:
Wie in den Kommentaren erwähnt, ist es einfacher, dies als Whitelist zu tun - ersetzen Sie die Zeichen, die nicht in Ihrer Sicherheitsliste enthalten sind.
Das
^
Zeichen caret ( ) ist die Negation der Menge[...]
, z.gi
B. global und ohne Berücksichtigung der Groß- und Kleinschreibung (letzteres ist etwas redundant, aber ich wollte es erwähnen), und die Sicherheitsliste in diesem Beispiel besteht aus Ziffern, Wortzeichen, Unterstrichen (\w
) und Leerzeichen ()\s
).quelle
Beachten Sie, dass Sie Folgendes tun können, wenn Sie einen Satz, einschließlich Schrägstriche und Sonderzeichen, weiterhin ausschließen möchten:
Beachten Sie besonders, dass Sie, um auch das "Minus" -Zeichen einzuschließen, mit einem Backslash wie der letzteren Gruppe davonkommen müssen. Wenn Sie dies nicht tun, wird auch 0-9 ausgewählt, was wahrscheinlich unerwünscht ist.
quelle
?
Teil des Zeichensatzes nach vorne. Dadurch werden die Zeichen aufgelistet, die Sie entfernen möchten. Wenn Sie sie also vom Strippen ausschließen, wird sie von Natur aus in das Endergebnis aufgenommen.Normaler Javascript-Regex verarbeitet keine Unicode-Buchstaben .
Nicht verwenden
[^\w\s]
, dies entfernt Buchstaben mit Akzenten (wie àèéìòù), ganz zu schweigen von Kyrillisch oder Chinesisch. Buchstaben aus solchen Sprachen werden vollständig entfernt.Sie möchten diese Buchstaben wirklich nicht zusammen mit allen Sonderzeichen entfernen. Sie haben zwei Chancen:
zum Beispiel :
[^èéòàùì\w\s]
.\p{...}
Syntax.quelle
Die erste Lösung funktioniert für kein UTF-8-Alphabet. (Es wird Text wie Їжак schneiden). 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 es sich um ein Sonderzeichen handelt. Die einzige Ausnahme gilt für Leerzeichen.
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, die nur Zeichenfolgen aus lateinischen Zeichen erzeugt, und dann entfernt der einfache Regexp alle Sonderzeichen. (Dies funktioniert auch für Chinesisch und Sie erhalten auch Nebenleistungen, wenn Sie
Tromsø
== machenTromso
).quelle
Ich benutze RegexBuddy zum Debuggen meiner Regexes, es hat fast alle Sprachen sehr nützlich. Dann kopieren / einfügen für die Zielsprache. Tolles Werkzeug und nicht sehr teuer.
Also habe ich Ihre Regex kopiert / eingefügt und Ihr Problem ist, dass [,] Sonderzeichen in Regex sind, also müssen Sie ihnen entkommen. Der reguläre Ausdruck sollte also sein: /!@#$^&%*()+=-[\x5B\x5D weiblicher\\ {{: •>
quelle
Warum tust du nicht so etwas wie:
um zu überprüfen, ob Ihre Eingabe ein spezielles Zeichen enthält
quelle
èéòàùì
und in einigen Fällen wird dies nicht die Lösung seinstr.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "")
Ich habe etw so gemacht. Aber es gibt einige Leute, die es viel einfacher gemacht habenstr.replace(/\W_/g,"");
quelle
\W
einige der Zeichen enthalten. Aber warum sollten Sie Zahlen herausfiltern? Das sind keine Sonderzeichen.