Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] usunięcie spacji
Forum PHP.pl > Forum > Przedszkole
ro6erto
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'
bastard13
str_replace() nie obsługuje wyrażeń regularnych, musisz użyć preg_replace()
http://php.net/manual/en/function.preg-replace.php
ro6erto
zrobiłem tak
  1. $string= "Ala ma , kota ? a nawet może mieć ich pięć ";
  2. $a = preg_replace('^[,?]$', '^[,?]$' , $string);
i nie działa sad.gif jak powinna prawidłowo wyglądać składnia takiego wyrażenia regularnego ?
bastard13
Tutaj masz wszystko na temat wyrażeń regularnych:
http://www.php.net/manual/en/reference.pcr...tern.syntax.php
ro6erto
troche tego nie rozumiem....
jak w takim razie zapisać ciąg ' x' w postaci wyrażenia regularnego?
gdzie x jest dowolnym znakiem ?!.,;: itp.
Fifi209
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.
ro6erto
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
Fifi209
To musisz sobie określić gdzie ma usuwać te spacje... to już wyrażenia.
kapuch
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 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 smile.gif
Pozdrawiam

Pan nizej tez podal dobre rozwiazanie.
muk4
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ć.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.