Gostaria de um RegExp que remova todos os caracteres especiais de uma string. Estou tentando algo assim, mas não funciona no IE7, embora funcione no Firefox.
var specialChars = "!@#$^&%*()+=-[]\/{}|:<>?,.";
for (var i = 0; i < specialChars.length; i++) {
stringToReplace = stringToReplace.replace(new RegExp("\\" + specialChars[i], "gi"), "");
}
Uma descrição detalhada do RegExp também seria útil.
javascript
regex
special-characters
Timothy Ruhle
fonte
fonte
Respostas:
Como foi mencionado nos comentários, é mais fácil fazer isso como uma lista branca - substitua os caracteres que não estão na sua lista segura.
O
^
caractere de sinal de intercalação ( ) é a negação do conjunto[...]
,gi
digamos , global e sem distinção entre maiúsculas e minúsculas (o último é um pouco redundante, mas eu queria mencionar) e a lista de segurança neste exemplo é dígitos, caracteres de palavra, sublinhados (\w
) e espaço em branco (\s
)fonte
Observe que se você ainda deseja excluir um conjunto, incluindo itens como barras e caracteres especiais, pode fazer o seguinte:
tome nota de que, para incluir também o caractere "menos", é necessário escapar dele com uma barra invertida como o último grupo. caso contrário, também selecionará 0-9, o que provavelmente é indesejável.
fonte
?
parte do conjunto de caracteres para a frente. isso lista os caracteres que você deseja remover, portanto, excluí-lo da remoção será inerentemente incluído no resultado final.O regex Javascript simples não manipula letras Unicode .
Não use
[^\w\s]
, isso removerá letras com sotaques (como àèéìòù), sem mencionar em cirílico ou chinês, as letras provenientes desses idiomas serão removidas.Você realmente não deseja remover essas letras junto com todos os caracteres especiais. Você tem duas chances:
por exemplo:
[^èéòàùì\w\s]
.\p{...}
sintaxe.fonte
A primeira solução não funciona para nenhum alfabeto UTF-8. (Ele cortará texto como Їжак). Eu consegui criar uma função que não usa RegExp e usa bom suporte a UTF-8 no mecanismo JavaScript. A ideia é simples se um símbolo é igual em maiúsculas e minúsculas, é um caractere especial. A única exceção é feita para espaços em branco.
Atualização: observe que esta solução funciona apenas para idiomas em que há letras maiúsculas e minúsculas. Em idiomas como o chinês, isso não vai funcionar.
Atualização 2: cheguei à solução original quando estava trabalhando em uma pesquisa difusa. Se você também estiver tentando remover caracteres especiais para implementar a funcionalidade de pesquisa, existe uma abordagem melhor. Use qualquer biblioteca de transliteração que produza uma sequência apenas de caracteres latinos e, em seguida, o Regexp simples fará toda a mágica de remover caracteres especiais. (Isso funcionará também para os chineses e você também receberá benefícios colaterais ao fazer
Tromsø
==Tromso
).fonte
Eu uso o RegexBuddy para depurar meus regexes, pois tem quase todos os idiomas muito úteis. Em seguida, copie / cole para o idioma de destino. Ferramenta fantástica e não muito cara.
Então, eu copiei / colei seu regex e seu problema é que [,] são caracteres especiais no regex, então você precisa escapar deles. Portanto, o regex deve ser: /!@#$^&%*()+=-[\x5B\x5D}\/{}|:<>?,./im
fonte
por que você não faz algo como:
para verificar se sua entrada contém algum caractere especial
fonte
èéòàùì
e alguns casos isso não será a soluçãostr.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "")
Eu fiz isso assim. Mas há pessoas que fizeram isso muito mais fácil comostr.replace(/\W_/g,"");
fonte
\W
contém alguns dos personagens. Mas por que você filtraria os números? Esses não são caracteres especiais.