2012-11-03 12 views
6

Potrzebuję pomocy, aby zastąpić wszystkie nie-słowa w łańcuchu.Zastąp wszystkie niesłowające się znaki, takie jak? * + #

Jako przykład (stadtbezirkspräsident' powinien zostać stadtbezirkspräsident.

Ten Regex powinien działać we wszystkich językach, więc jest to trochę trudne, ponieważ nie mam pojęcia, jak dopasować znaki, takie jak ñ lub œ. Próbowałem rozwiązać ten problem z

, ale są nadal wiele znaków specjalnych, takich jak Ø w lewo.

Być może istnieje do tego ogólny Selektor, czy ktoś wcześniej rozwiązał ten problem?

+0

Ø to litera w różnych językach (na przykład duński) :) –

+0

podobne: [this] (http://stackoverflow.com/questions/2392194/how-to-match-the-international-alphabet-english -az-non-english-with-a-regu) pytanie. javascript regex nie ma natywnych odpowiedników unicode –

Odpowiedz

6

Jeśli masz określić wszystkie waha się Unicode, to będzie dużo pracy.

Może to więcej sensu używać Steven Levithan na XRexExp package with Unicode add-ons i wykorzystywać swoje Unicode skróty własności:

var regex = new XRegExp("\\P{L}+", "g") 
string = XRegExp.replace(string, regex, "") 
+1

@ Ωmega: Dzięki za edycję! –

+1

thx !!!! : D XRegExp jest naprawdę niesamowity! –

6

Spróbuj użyć sztuczka

str.replace(/(?!\w)[\x00-\xC0]/g, '') 
+1

'\ w' nie jest locale-aware lub Unicode-aware. –

+0

@TimPietzcker - Wiem, ale moje rozwiązanie usuwa znaki specjalne w niskim zakresie szesnastkowym tylko –

+1

(Tak, czy nie edytowałeś go tak, jak pisałem mój komentarz?) - OK, ale wciąż jest wystarczająco dużo znaków, które nie będą zostać złapanym przez to (nawet w 8-bitowym zestawie ANSI: '×' i '÷' przychodzą na myśl). –

1

To jest bardziej komentarzu do odpowiedzi Tim Pietzcker, ale prezentuje kod w komentarzach jest niewygodne ... Oto prosty przykład przy użyciu pakietu XRexExp:

<p id=orig>Bundespräsident/ß+ð/ə¿α!</p> 
<p id=new></p> 
<script src="http://cdnjs.cloudflare.com/ajax/libs/xregexp/2.0.0/xregexp-min.js"> 
</script> 
<script src="http://xregexp.com/addons/unicode/unicode-base.js"> 
</script> 
<script> 
var regex = new XRegExp("\\P{L}+", "g"); 
var string = document.getElementById('orig').innerHTML; 
string = XRegExp.replace(string, regex, ""); 
document.getElementById('new').innerHTML = string; 
</script> 

do użytku produkcyjnego, prawdopodobnie chcą ściągnąć jakieś wersje pakietu podstawowego i Unicode plug-in i używać ich na serwerze.

Uwaga: Kod sprawdza znaki, które nie są sklasyfikowane jako litery (alfabetycznie) w kodzie Unicode. Przypuszczam, że odpowiada to temu, co masz na myśli przez "wyraz", chociaż słowa w języku naturalnym mogą zawierać łączniki, apostrofy i inne nie-litery.

Należy pamiętać, że znaki są dodawane do kodu Unicode, a kategoria postaci może (rzadko) się zmieniać. Pakiet został dobrze utrzymany; odpowiada on Unicode 6.1 (wersja 6.2 jest wyłączona, ale nie ma nowych liter).

Powiązane problemy