2012-01-23 15 views
42

böyle bir dizesi vardır daha: Yukarıdaki dize gelen tüm özel karakterleri kaldırıyor yapmak ve boşlukların yerine ve durumda bunlar yazılan istiyorum nejQuery dizesinden özel karakterleri kaldırmak ve

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

, alt çizgi, bir karakterle.

yukarıdaki dize "dönüşüm" den sonra bu şekilde görünecektir: tarafından varsayarsak

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

İlk olarak, muhtemelen, dize için çift tırnak kullanmak. –

+0

Haklısın, ama bu sadece bir örnekti. Bunun için özür dilerim. – Roel

+1

bu neden jQuery olarak etiketlendi? Metin işlemenin jQuery ile ilgisi yoktur. – gonchuki

cevap

97

replace(/[^a-z0-9\s]/gi, '') sadece alfanümerik değerlere aşağı dize süzer ve replace(/[_\s]/g, '-') tire ile alt çizgi ve boşluklar yerini alacak: Regex

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

Kaynak: İşte RegEx for Javascript to allow only alphanumeric

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

+2

* [Daniel Przybylowski] 'den Yorum (http://stackoverflow.com/users/3941987/daniel-przybylowski): * Alt çizgi ilk regex tarafından kaldırılmış gibi görünüyor. Yani ikincisi şöyle olabilir: replace (/ \ s {1,}/g, '-') Bir niceleyicinin nedeni, bir veya daha fazla boşluğu '-' ile değiştirmektir. Niye ya ? "Bir şey & bir şey" gibi dize düşünün. –

+0

Bunun için bir demet teşekkürler! – Yass

+0

ne yapıyor? –

21

"özel" olmayan kelime karakterleri demek, o zaman oldukça kolaydır.

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

Sözcük olmayan karakterleri kaldırmak (veya bunları 'hiçbir şey' ile değiştirmek istiyorum). Sayıları ve normal harfleri saklamak ve boşlukları ve alt çizgileri yatay bir çizgi ile değiştirmek istiyorum. – Roel

+0

Bu en güçlü cevaptır. Basit ama güçlü ..! – KeepMove

+1

Yukarıdaki tüm cevaplardan farklı olarak, bunun aslında "foo-bar" gibi "foo & bar" ve bu "foo - bar" gibi değil. Kısa, basit ve iş mükemmel! –

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

Ben Jasper'ın cevap yorum yapamam, ben onun çözümde küçük bir hatayı işaret etmek istiyorum:

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

sorun sonra ilk kod tüm tire kaldırır olması ve bunların yerine çalışır :) Değiştirme çağrılarını tersine çevirmeli ve ikinci ifadeyi normal ifadeye eklemelisiniz. Bunun gibi:

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

Sayı, alt çizgi, beyaz boşluk ve özel karakterleri dize tümcesinden kaldırın. Bir tek tırnak içine olduğundan

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

Demo

İlgili konular