Chciałbym RegExp, który usunie wszystkie znaki specjalne z ciągu. Próbuję czegoś takiego, ale to nie działa w IE7, chociaż działa w przeglądarce Firefox.
var specialChars = "!@#$^&%*()+=-[]\/{}|:<>?,.";
for (var i = 0; i < specialChars.length; i++) {
stringToReplace = stringToReplace.replace(new RegExp("\\" + specialChars[i], "gi"), "");
}
Pomocny byłby również szczegółowy opis RegExp.
javascript
regex
special-characters
Timothy Ruhle
źródło
źródło
Odpowiedzi:
Jak wspomniano w komentarzach, łatwiej jest to zrobić jako białą listę - zamień znaki, których nie ma na liście bezpiecznych.
Znak caret (
^
) jest negacją zestawu[...]
,gi
powiedzmy globalną i bez rozróżniania wielkości liter (ten drugi jest nieco redundantny, ale chciałem o tym wspomnieć), a lista bezpiecznych elementów w tym przykładzie to cyfry, znaki słowne, podkreślenia (\w
) i białe znaki (\s
).źródło
Pamiętaj, że jeśli nadal chcesz wykluczyć zestaw, w tym ukośniki i znaki specjalne, możesz wykonać następujące czynności:
zwróć szczególną uwagę, że aby uwzględnić także znak „minus”, musisz uciec przed odwrotnym ukośnikiem, jak ta ostatnia grupa. jeśli tego nie zrobisz, wybierze również 0-9, co prawdopodobnie jest niepożądane.
źródło
?
część zestawu znaków do przodu. wyświetla listę znaków, które chcesz usunąć, więc wykluczenie go z usuwania spowoduje z natury włączenie go do wyniku końcowego.Zwykłe wyrażenie regularne JavaScript nie obsługuje liter Unicode .
Nie używaj
[^\w\s]
, spowoduje to usunięcie liter z akcentami (jak àèéìòù), nie wspominając o cyrylicy lub chińskim, litery pochodzące z takich języków zostaną całkowicie usunięte.Naprawdę nie chcesz usuwać tych liter razem ze wszystkimi znakami specjalnymi. Masz dwie szanse:
na przykład:
[^èéòàùì\w\s]
.\p{...}
składnię.źródło
Pierwsze rozwiązanie nie działa dla żadnego alfabetu UTF-8. (Wytnie tekst taki jak Їжак). Udało mi się stworzyć funkcję, która nie korzysta z RegExp i korzysta z dobrej obsługi UTF-8 w silniku JavaScript. Pomysł jest prosty, jeśli symbol jest taki sam wielkimi literami, a małe litery to znak specjalny. Jedyny wyjątek dotyczy białych znaków.
Aktualizacja: należy pamiętać, że to rozwiązanie działa tylko w przypadku języków, w których występują małe i duże litery. W językach takich jak chiński to nie zadziała.
Aktualizacja 2: Doszedłem do oryginalnego rozwiązania, kiedy pracowałem nad rozmytym wyszukiwaniem. Jeśli próbujesz również usunąć znaki specjalne w celu zaimplementowania funkcji wyszukiwania, istnieje lepsze podejście. Użyj dowolnej biblioteki transliteracji, która wygeneruje ciąg tylko ze znaków łacińskich, a następnie prosty Regexp wykona całą magię usuwania znaków specjalnych. (Będzie to działać również w przypadku języka chińskiego, a Ty również otrzymasz świadczenia dodatkowe, wykonując
Tromsø
==Tromso
).źródło
Używam RegexBuddy do debugowania moich wyrażeń regularnych, ponieważ ma prawie wszystkie języki bardzo przydatne. Niż skopiuj / wklej dla docelowego języka. Wspaniałe narzędzie i niezbyt drogie.
Więc skopiowałem / wkleiłem twoje wyrażenie regularne, a twoim problemem jest to, że [,] są znakami specjalnymi w wyrażeniu regularnym, więc musisz uciec przed nimi. Wyrażenie regularne powinno więc brzmieć:
źródło
dlaczego nie robisz czegoś takiego:
aby sprawdzić, czy dane wejściowe zawierają jakieś specjalne znaki
źródło
èéòàùì
a w niektórych przypadkach nie będzie to rozwiązaniestr.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "")
Zrobiłem coś takiego. Ale są ludzie, którzy zrobili to znacznie łatwiejstr.replace(/\W_/g,"");
źródło
\W
zawiera niektóre postacie. Ale dlaczego odfiltrowujesz liczby? To nie są znaki specjalne.