Chcę usunąć wszystkie znaki specjalne z wyjątkiem spacji z ciągu za pomocą JavaScript.
Na przykład
abc's test#s
powinien wyświetlać jako
abcs tests
.
Chcę usunąć wszystkie znaki specjalne z wyjątkiem spacji z ciągu za pomocą JavaScript.
Na przykład
abc's test#s
powinien wyświetlać jako
abcs tests
.
Odpowiedzi:
Powinieneś użyć funkcji zamiany napisów z pojedynczym wyrażeniem regularnym. Zakładając, że przez znaki specjalne masz na myśli wszystko, co nie jest literą, oto rozwiązanie:
źródło
str.replace(/[^a-zA-Z0-9]/g, "")
str.replace(/[^a-zA-Z0-9 ]/g, "");
powiadomienia, jest spacja między 0-9 a]Możesz to zrobić, określając znaki, które chcesz usunąć:
Alternatywnie, aby zmienić wszystkie znaki z wyjątkiem cyfr i liter, spróbuj:
źródło
/[^a-zA-Z0-9]/g
()
iwhitespaces
w łańcuchu.text().replace(/[ ()]/g, '')
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 równy wielkimi i małymi literami, jest to znak specjalny. Jedyny wyjątek dotyczy białych znaków.
Aktualizacja: Należy pamiętać, że to rozwiązanie działa tylko w językach, 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 wyszukiwaniem rozmytym. 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 utworzy łańcuch tylko ze znaków łacińskich, a proste Regexp wykona całą magię usuwania znaków specjalnych. (To zadziała również dla języka chińskiego, a także otrzymasz dodatkowe korzyści, wykonując
Tromsø
==Tromso
).źródło
Nie znam JavaScript, ale czy nie jest możliwe użycie wyrażenia regularnego?
Coś takiego jak
[^\w\d\s]
będzie pasować do wszystkiego oprócz cyfr, znaków i spacji. Byłoby tylko kwestią znalezienia składni w JavaScript.źródło
Wypróbowałem bardzo kreatywne rozwiązanie firmy Seagul, ale okazało się, że traktuje cyfry również jako znaki specjalne, co nie odpowiada moim potrzebom. Oto moja (bezpieczna) modyfikacja rozwiązania Seagul ...
źródło
reg
w swojej pierwszej funkcji.szukaj wszystkiego nie (znaki słowne || spacja):
źródło
Spróbuj użyć tego
tutaj ^ karat oznacza negację \ w dla [a-zA-Z0-9_] znaków słownych i \ s dla spacji / [] / gi dla globalnego
źródło
kropka (.) nie może być uznana za specjalną. Dodałem warunek LUB do odpowiedzi Mozfeta i Seagull:
źródło
źródło
Czyje znaki specjalne chcesz usunąć z ciągu, przygotuj ich listę, a następnie użyj funkcji zamiany javascript, aby usunąć wszystkie znaki specjalne.
lub możesz uruchomić pętlę dla całego ciągu i porównać pojedynczy znak z kodem ASCII i ponownie wygenerować nowy ciąg.
źródło