Substitua os caracteres especiais em uma string por _ (sublinhado)

95

Quero remover caracteres especiais de uma string e substituí-los pelo _caractere.

Por exemplo:

string = "img_realtime_tr~ading3$"

A string resultante deve ser semelhante a "img_realtime_tr_ading3_";

Preciso substituir esses caracteres: & / \ # , + ( ) $ ~ % .. ' " : * ? < > { }

user1049997
fonte
49
por que isso está fechado, é uma boa pergunta. Como substituir caracteres especiais, útil ao fazer URLs amigáveis ​​para SE. Ainda bem que alguém respondeu a isso.
bicicleta de
1
Uma situação extraordinariamente limitada que geralmente não se aplica ao público mundial da Internet? Bem, vamos apenas dizer que pelo menos 108 pessoas estavam pensando o contrário.
Antoine Pelletier
1
Fechadas ? Muito útil ao coletar dados sujos.
Standaa Reintegrar Monica
Este não deve ser fechado
Mustkeem K

Respostas:

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

Como alternativa, para alterar todos os caracteres, exceto números e letras, tente:

string = string.replace(/[^a-zA-Z0-9]/g,'_');
Niet the Dark Absol
fonte
Legal! !está faltando na primeira linha.
ProblemsOfSumit
5
A segunda linha é muito útil em várias ocasiões.
mastazi de
\-e =também ausente :)
Simo D'lo Mafuxwana
2
Se você tiver um caractere especial antes de um espaço como hello! wordvocê vai acabar com dois sublinhados consecutivos como este hello__word, você pode fazer isso:string = string.replace(/[^a-zA-Z0-9]/g,'_').replace(/__/g,'_');
DannyFeliz
3
@DannyFeliz ou mesmo string = string.replace(/[^a-zA-Z0-9]/g,'_').replace(/_{2,}/g,'_');se você não sabe quantos sublinhados consecutivos
falkodev
1
string = string.replace(/[\W_]/g, "_");
Wen
fonte