2012-01-23 12 views
42

mam ciąg jak poniżej:jQuery usunąć znaki specjalne z łańcucha i bardziej

var str = "I'm a very^ we!rd* Str!ng."; 

Co chciałbym zrobić, to usunięcie wszystkich znaków specjalnych z powyższego łańcucha i zastąpić spacje aw przypadku są one wpisane , podkreśla, z - znakiem.

Powyższy ciąg wyglądałby następująco po „transformacji”:

var str = 'im-a-very-werd-strng'; 
+0

pierwsze, prawdopodobnie używać cudzysłowów dla napisu, ponieważ istnieje pojedynczy cytat wewnątrz. –

+0

Masz rację, ale to był tylko przykład. Przepraszam za to. – Roel

+1

dlaczego jest to oznaczane jako jQuery? przetwarzanie tekstu nie ma nic wspólnego z jQuery. – gonchuki

Odpowiedz

97

replace(/[^a-z0-9\s]/gi, '') filtruje ciąg do zaledwie wartości alfanumerycznych i replace(/[_\s]/g, '-') zastąpi podkreśleń i spacji z myślnikami:

str.replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '-') 

źródło Regex: RegEx for Javascript to allow only alphanumeric

Oto wersja demo: http://jsfiddle.net/vNfrk/

+2

* Komentarz [Daniel Przybylowski] (http://stackoverflow.com/users/3941987/daniel-przybylowski): * Wygląda na to, że podkreślenie jest usuwane przez pierwsze wyrażenie. Tak więc drugi mógłby wyglądać następująco: replace (/ \ s {1,}/g, '-') Powodem kwantyfikatora jest zastąpienie jednego lub więcej spacji za pomocą "-". Czemu ? Wyobraź sobie łańcuch jak "coś i coś". –

+0

Dziękuję za to! – Yass

+0

co robi \ s? –

21

Przyjmując za „specjalne” masz na myśli znaki inne niż słowo, to jest całkiem proste.

str = str.replace(/[_\W]+/g, "-") 
+0

Chcę usunąć nieprzypisane znaki (lub zastąpić je "nic"). Chcę zachować liczby i normalne litery i chcę zastąpić spacje i podkreślenia poziomym paskiem. – Roel

+0

To najpotężniejsza odpowiedź. Prosty, ale potężny ...! – KeepMove

+1

Warto zauważyć, że w przeciwieństwie do wszystkich powyższych odpowiedzi, ten naprawdę zajmuje się "foo & bar" jak ten "foo-bar", a nie jak ten "foo-bar". Krótkie, proste i doskonale się nadają! –

13
str.toLowerCase().replace(/[\*\^\'\!]/g, '').split(' ').join('-') 
1

Ponieważ nie mogę wypowiedzieć się na temat odpowiedzi Jaspera, chciałbym zwrócić uwagę na mały błąd w jego rozwiązanie:

str.replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '-'); 

Problem polega na tym, że najpierw kod usuwa wszystkie łączniki, a następnie próbuje je zastąpić :) Powinieneś odwrócić zastąpić połączenia, a także dodać łącznik do drugiej, aby zastąpić wyrażenie regularne. W ten sposób:

str.replace(/[_\s]/g, '-').replace(/[^a-z0-9-\s]/gi, ''); 
1

Usuń cyfry, podkreślenie, znaki białe i znaki specjalne ze zdania napisowego.

str.replace(/[0-9`[email protected]#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi,''); 

Demo