2010-09-23 28 views
34

abzustreifen eine Funktion benötigen eine Reihe von illegalen Charakter in Javascript abzustreifen: |&;$%@"<>()+,Javascript Zeichenfolge mit Regex ersetzen ungültige Zeichen

Dies ist ein klassisches Problem mit regulären Ausdrücken gelöst werden, was jetzt I have 2 problems bedeutet. Diese

ist das, was ich bisher habe:

var cleanString = dirtyString.replace(/\|&;\$%@"<>\(\)\+,/g, ""); 

ich mit einem umgekehrten Schrägstrich die regex Sonderzeichen bin entkommen, aber ich habe eine harte Zeit versucht, zu verstehen, die, was los ist.

Wenn ich versuche mit einzelnen Literalen isoliert die meisten von ihnen scheinen zu arbeiten, aber sobald ich sie zusammen in der gleichen Regex je nach der Reihenfolge der Ersetzung ist gebrochen.

heißt dies nicht funktionieren ->dirtyString.replace(/\|<>/g, ""):

Hilfe zu schätzen!

+2

Mit einer einfachen 'for' Schleife, gibt es keine Chance, Missverständnisse :) –

+0

wenn ich Nein SO das wäre, was ich getan hätte :) – JohnIdol

Antwort

60

Was Sie sind character classes brauchen. Dabei müssen Sie sich nur um die Zeichen ], \ und - kümmern (und ^, wenn Sie es direkt nach dem Anfang der Zeichenklasse "[" platzieren).

Syntax: [Zeichen] wo Zeichen eine Liste mit Zeichen ist.

Beispiel:

var cleanString = dirtyString.replace(/[|&;$%@"<>()+,]/g, ""); 
+1

sind Escape-Zeichen nicht in der Zeichenklasse erforderlich? – JohnIdol

+5

Nein, nur für ']' und '\' (und '^' wenn du es nirgendwo anders als an der ersten Stelle eingibst, und '-' wenn du es nicht als erstes oder letztes anbringst). –

+0

Es fehlen einige Sonderzeichen ... – ViliusL

5

Sie müssen sie alle in eine Zeichenklasse einbinden. Die aktuelle Version bedeutet, dass diese Zeichenfolge durch eine leere Zeichenfolge ersetzt wird. Wenn es in eckige Klammern eingeschlossen wird, bedeutet dies, dass alle dieser Zeichen durch eine leere Zeichenfolge ersetzt werden.

var cleanString = dirtyString.replace(/[\|&;\$%@"<>\(\)\+,]/g, ""); 
4

Setzen Sie sie in Klammern []:

var cleanString = dirtyString.replace(/[\|&;\$%@"<>\(\)\+,]/g, ""); 
61

ich aus der inversen Perspektive um es zu betrachten neigen, die können, was Sie bestimmt:

Welche Zeichen will ich erlauben?

Das ist, weil es lots of characters geben könnte, die irgendwie in eine Schnur machen, die Sachen sprengen, die Sie nicht erwarten würden.

Zum Beispiel nur diese ein für Buchstaben und Zahlen können Gruppen von ungültigen Zeichen zu entfernen sie mit einem Bindestrich ersetzt:

"This¢£«±Ÿ÷could&*()\/<>[email protected]#$%^bad".replace(/([^a-z0-9]+)/gi, '-'); 
//Result: "This-could-be-bad" 
Verwandte Themen