2011-12-01 27 views
13

Jak usunąć znaki, takie jak znaki interpunkcyjne, przecinki, kreski itp. Z łańcucha znaków, w sposób bezpieczny dla wielu znaków?Regex do usuwania znaków niealfanumerycznych ze znaków UTF8

będę pracował przy udziale wielu różnych językach, a ja zastanawiałem się, czy jest coś, co może mi pomóc z tym

Dzięki

+0

Chcesz zachować tylko 'a-z' i' 0-9'? Czy są też wszystkie znaki specjalne z różnych języków? – Marcus

+0

wyjaśnienie, dlaczego mój wynik sugeruje lepsze podejście. –

+0

@ Marcus. Muszę zachować znaki Unicode – Thomas

Odpowiedz

24

Istnieją thingys klasa znaków Unicode, które można użyć:

Aby dopasować symbole inne niż literowe, można po prostu użyć \PL+, negacji z \p{L}. Aby nie usuwać spacji, użyj klasy charytatywnej, takiej jak [^\pL\s]+. Lub po prostu usunąć interpunkcja z \pP+

No i oczywiście nie zapomnij o modyfikatorze regex /u.

+0

Myślę, że ten ma potencjał. Muszę to zbadać. Dzięki mario – Thomas

+2

[^ \ pL \ s] + jest zwycięzcą – Thomas

+0

nie wiedział, sekwencje ucieczki działają w nawiasach '[]'. Dzięki –

0

Może to być przydatne?

$newstring = preg_replace('/[^0-9a-zA-Z\s]/', $oldstring); 
+2

Spowoduje to również usunięcie znaków innych niż ASCII. Nie chcę tego – Thomas

1

użyłem to:

$clean = preg_replace("/[^\p{L}|\p{N}]+/u", " ", $raw); 
$clean = preg_replace("/[\p{Z}]{2,}/u", " ", $clean); 
+0

Czy możesz opisać, co tu się właściwie dzieje? –

Powiązane problemy