web-dev-qa-db-fra.com

Chaîne Javascript remplacée par regex pour supprimer les caractères illégaux

Besoin d'une fonction pour supprimer un ensemble de caractères illégaux en javascript: |&;$%@"<>()+,

Il s'agit d'un problème classique à résoudre avec des expressions rationnelles, ce qui signifie maintenant j'ai 2 problèmes .

Voici ce que j'ai jusqu'à présent:

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

J'échappe aux caractères spéciaux regex avec une barre oblique inverse, mais j'ai du mal à comprendre ce qui se passe.

Si j'essaie d'isoler des littéraux simples la plupart d'entre eux semblent fonctionner, mais une fois que je les ai regroupés dans la même expression régulière selon l'ordre de remplacement cassé.

c'est-à-dire que cela ne fonctionnera pas -> dirtyString.replace(/\|<>/g, ""):

Aide appréciée!

52
JohnIdol

Ce dont vous avez besoin sont classes de caractères . En cela, vous n'avez qu'à vous soucier de la ], \ et - caractères (et ^ si vous le placez juste après le début de la classe de caractères "[ ").

Syntaxe: [ caractères ] caractères est une liste de caractères.

Exemple:

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

J'ai tendance à le regarder dans la perspective inverse, ce qui peut être ce que vous vouliez:

Quels caractères dois-je autoriser?

C'est parce qu'il pourrait y avoir beaucoup de caractères qui se transforment en une chaîne qui fait exploser des trucs auxquels vous ne vous attendez pas.

Par exemple, celui-ci ne permet que les lettres et les chiffres supprimant les groupes de caractères invalides en les remplaçant par un hypen:

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

Vous devez les envelopper tous dans une classe de personnage. La version actuelle signifie remplacer cette séquence de caractères par une chaîne vide. Lorsqu'il est placé entre crochets, cela signifie remplacer tout de ces caractères par une chaîne vide.

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

Mettez-les entre parenthèses []:

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