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 (1 - 9)
bastard13
post
Post #2





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


str_replace() nie obsługuje wyrażeń regularnych, musisz użyć preg_replace()
http://php.net/manual/en/function.preg-replace.php
Go to the top of the page
+Quote Post
ro6erto
post
Post #3





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

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


zrobiłem tak
  1. $string= "Ala ma , kota ? a nawet może mieć ich pięć ";
  2. $a = preg_replace('^[,?]$', '^[,?]$' , $string);
i nie działa (IMG:style_emoticons/default/sad.gif) jak powinna prawidłowo wyglądać składnia takiego wyrażenia regularnego ?
Go to the top of the page
+Quote Post
bastard13
post
Post #4





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


Tutaj masz wszystko na temat wyrażeń regularnych:
http://www.php.net/manual/en/reference.pcr...tern.syntax.php
Go to the top of the page
+Quote Post
ro6erto
post
Post #5





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

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


troche tego nie rozumiem....
jak w takim razie zapisać ciąg ' x' w postaci wyrażenia regularnego?
gdzie x jest dowolnym znakiem ?!.,;: itp.
Go to the top of the page
+Quote Post
Fifi209
post
Post #6





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Cytat(ro6erto @ 4.07.2010, 15:54:57 ) *
troche tego nie rozumiem....
jak w takim razie zapisać ciąg ' x' w postaci wyrażenia regularnego?
gdzie x jest dowolnym znakiem ?!.,;: itp.


. to dowolny znak
* dowolna ilość powtórzeń

zamiana:

  1.  
  2. str_replace(' ', '', $tekst);
  3.  


Nie trzeba używać wyrażeń tutaj.
Go to the top of the page
+Quote Post
ro6erto
post
Post #7





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
Fifi209
post
Post #8





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


To musisz sobie określić gdzie ma usuwać te spacje... to już wyrażenia.
Go to the top of the page
+Quote Post
kapuch
post
Post #9





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
muk4
post
Post #10





Grupa: Zarejestrowani
Postów: 309
Pomógł: 56
Dołączył: 3.11.2006
Skąd: Gliwice

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


Spróbuj tak:
  1. <?php
  2. $string = 'Ala ma kota , kot ma na imię Bolek , Bolek lubi się bawić !'; //tekst do sprawdzenia
  3. $array1 = array(' <',' >', ' =', ' +',' -', ' ;', ' !', ' ?', ' .', ' ,', ' :'); //tablica która zawiera ciągi których ma szukać funkcja
  4. $array2 = array('<','>', '=', '+','-', ';', '!', '?', '.', ',', ':'); //tablica która zawiera znaki które mają być zamienione z tymi w tablicy 1
  5.  
  6. $var = str_replace($array1, $array2, $string); //zapisanie wyniku operacji do zmiennej $var
  7. echo $var; // "Ala ma kota, kot ma na imię Bolek, Bolek lubi się bawić!"
  8. ?>


Lepiej nie potrafię tego prostego kodu opisać.

Ten post edytował muk4 4.07.2010, 16:59:00
Go to the top of the page
+Quote Post

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: 24.08.2025 - 02:20