Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] usunięcie spacji
ro6erto
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 7.10.2006

Ostrzeżenie: (0%)
-----


Witam, mam pytanie jak napisać przykład, który usunie niepotrzebne spacje np w tekście:
Ala ma kota , kot ma na imię Bolek , Bolek lubi się bawić !

Docelowo chciałbym otrzymać:

Ala ma kota, kot ma na imię Bolek, Bolek lubi się bawić!
Próbowałem to zrobić w następujący sposób ale niestety lipa..
  1. $string= "Ala ma kota , kot ma na imię Bolek , Bolek lubi się bawić ! ";
  2. $string= str_replace('^ [,!?;.]', substr($string, 2), $string);


Moja idea była tak żeby znajdowano ciąg ' !' lub ' x' gdzie x jest dowolnym znakiem a następnie ciąg ten był obcinany od początku o jeden znak, tak aby pozostawał sam znak 'x'
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
ro6erto
post
Post #2





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 7.10.2006

Ostrzeżenie: (0%)
-----


ale czy w tym przypadku nie będzie tak że pousuwa spacje tam gdzie nie powinno tzn między wyrazami?

Nie ma usuwać dowolnego znaku tylko konkretne: ?!;:.,-+=><
Czyli ma zamienić ciąg ' x' na ciąg bez spacji czyli 'x' gdzie x jest jednym ze znaków wymienionym wyżej

Ten post edytował ro6erto 4.07.2010, 15:28:13
Go to the top of the page
+Quote Post
kapuch
post
Post #3





Grupa: Zarejestrowani
Postów: 389
Pomógł: 69
Dołączył: 26.04.2010
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Cytat(ro6erto @ 4.07.2010, 16:26:30 ) *
ale czy w tym przypadku nie będzie tak że pousuwa spacje tam gdzie nie powinno tzn między wyrazami?

Nie ma usuwać dowolnego znaku tylko konkretne: ?!;:.,-+=><
Czyli ma zamienić ciąg ' x' na ciąg bez spacji czyli 'x' gdzie x jest jednym ze znaków wymienionym wyżej

to zrob tak:
  1. $dane = str_replace(" ,",",", $dane);

Tam pierw jest spacja+przecinek i zamieniasz to na sam przecinek, wtedy zwyklych spacji ci nie ruszy (IMG:style_emoticons/default/smile.gif)

A wyrazenie regularne powinno wygladac CHYBA tak:
  1. $dane = preg_replace("/\s\,/", ",", $dane);

A jesli nie chodzi tylko o przecinek, to tak:
  1. $dane= preg_replace("/\s(.+?)/", "\\1", $dane); // usuwa spacje przed kazdym znakiem
  2. // albo tak
  3. $dane = preg_replace("/\s(\W+)/", "\\1", $dane); // usuwa spacje przed kazdym znakiem innym niz word
  4. //albo i tak
  5. $dane = preg_replace("/\s([\,\.]+)/", "\\1", $dane); // usuwa spacje przed przecinkiem lub kropka

To moje przyklady, byc moze sa zle (dopiero sie ucze regexa), ale warto poprobowac.

EDIT:
Bawie sie akurat preg_replace, wiec sprawdzilem swoje wypociny i ten match:
  1. $dane = preg_replace("/\s([\,\.]+)/", "\\1", $dane);

zalatwi twoj problem (dziala), teraz wystarczy ze dodasz pomiedzy [ ] inne znaki, ktore maja byc brane pod uwage (poprzedzajac \) i wszystko ladnie podmienia (IMG:style_emoticons/default/smile.gif)
Pozdrawiam

Pan nizej tez podal dobre rozwiazanie.

Ten post edytował kapuch 4.07.2010, 17:23:37
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.04.2026 - 08:06