Remplacer les caractères spéciaux d'une chaîne par _ (trait de soulignement)

93

Je souhaite supprimer les caractères spéciaux d'une chaîne et les remplacer par le _caractère.

Par exemple:

string = "img_realtime_tr~ading3$"

La chaîne résultante devrait ressembler à "img_realtime_tr_ading3_";

J'ai besoin de remplacer ces caractères: & / \ # , + ( ) $ ~ % .. ' " : * ? < > { }

user1049997
la source
48
pourquoi est-ce fermé, c'est une bonne question. Comment remplacer les caractères spéciaux, utile lors de la création d'URL compatibles SE. Heureusement, quelqu'un y a encore répondu.
vélo le
1
Une situation extraordinairement étroite qui n'est généralement pas applicable à l'audience mondiale d'Internet? Eh bien, disons simplement qu'au moins 108 personnes pensaient autrement.
Antoine Pelletier
1
Fermé ? Cependant, assez utile pour récupérer des données sales.
Standaa Reinstate Monica le
Cela ne devrait pas être fermé
Mustkeem K

Réponses:

210
string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g,'_');

Sinon, pour changer tous les caractères à l'exception des chiffres et des lettres, essayez:

string = string.replace(/[^a-zA-Z0-9]/g,'_');
Niet the Dark Absol
la source
Cool! !manque cependant dans la première ligne.
ProblemsOfSumit
4
La deuxième ligne est très utile dans un certain nombre d'occasions.
mastazi
\-et =aussi manquant :)
Simo D'lo Mafuxwana
2
Si vous avez un caractère spécial avant un espace comme hello! wordvous vous retrouverez avec deux traits de soulignement consécutifs comme celui-ci hello__word, vous pouvez le faire:string = string.replace(/[^a-zA-Z0-9]/g,'_').replace(/__/g,'_');
DannyFeliz
3
@DannyFeliz ou même string = string.replace(/[^a-zA-Z0-9]/g,'_').replace(/_{2,}/g,'_');si vous ne savez pas combien de
traits de
1
string = string.replace(/[\W_]/g, "_");
Loupe
la source