Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][wyrażenie regularne] usuwanie krzaków
Forum PHP.pl > Forum > Przedszkole
JoShiMa
Mam wyrażenie regularne, które, przynajmniej teoretycznie powinno usuwać wszystko co nie jest literą cyfra i minusem. Niestety przepuszcza równieć inne krzaki.

Na przykład w tekście: the way » :photoschau on we heart it / visual bookmark #8765543

nie powinno być tych strzałek za słowem 'way'

Próbowałam tak:
  1. preg_replace('/([^a-żA-Ż0-9-])+/',' ',$string)

i tak:
  1. preg_replace('/([^\w-ęĘóÓąĄśŚłŁżŻźŹćĆńŃ])+/',' ',$string)



Jak się takich znaków pozbyć zostawiając jednocześnie polskie?

Oczywiście jak zrezygnuję z przepuszczania polskich znaków (w szczególności 'ż') to inne 'krzaki tez znikają, ale nie o to chodzi.
pyro
  1. $string = preg_replace('|[^a-z0-9\-ążćńłóę]|i', '', $string):


// ADD

i pewnie będziesz musiała też wstawić duże polskie litery

// ADD

Nie chciało mi się szukać błędu w Twoim wyrażeniu więc napisałem nowe, ale jak teraz zerknąłem, to po prostu zabrakło escapeowania do znaku `-`, bo w nawiasie kwadratowym określa przedział, więc należało go wyescapować smile.gif

// ADD

A i te nawiasy razem z tymi plusami są nieoptrzebne bo i tak wyrażenie wyłapie każdy pojedyńczy znak (tak informacyjnie)
potreb
Wywala wszystko co nie jest literą, cyfrą i dodaje myślnik, tylko dodaj jeszcze polskie znaki, ale nie wiem jak z kodowaniem:
  1. $str = preg_replace( "/[^a-z0-1-_]{1}/i", '-', $str );
JoShiMa
Wszystko ładnie, tylko rezultat się nie zmienia Twoje wyrażenie działa pod warunkiem, ze nie wstawi się Ż. Nie wiem czy to jest istotne, ale to wszystko jest w kodowaniu utf8.

Cytat(potreb @ 13.04.2011, 20:54:44 ) *
Wywala wszystko co nie jest literą, cyfrą i dodaje myślnik, tylko dodaj jeszcze polskie znaki, ale nie wiem jak z kodowaniem:
  1. $str = preg_replace( "/[^a-z0-1-_]{1}/i", '-', $str );


Tak też już robiłam \w to to samo co a-zA-Z. Efekt est jeszcze gorszy, bo niechciany znaczek jest zwyczajnie zamieniany na �
potreb
  1. $str = "dssdsd8ŻżÓóŁł_972839809**&^%^3223;';/.[;[";
  2. $str = preg_replace( "/[^a-z0-1-ŻżÓóŁł_]{1}/iu", '-', $str );
  3. echo $str


Powinno być, ogólnie chyba lepiej czyścić z polskich znaków.
JoShiMa
Cytat(potreb @ 13.04.2011, 21:04:54 ) *
  1. $str = "dssdsd8ŻżÓóŁł_972839809**&^%^3223;';/.[;[";
  2. $str = preg_replace( "/[^a-z0-1-ŻżÓóŁł_]{1}/iu", '-', $str );
  3. echo $str

Super. Wreszcie działa.

Cytat(potreb @ 13.04.2011, 21:04:54 ) *
Powinno być, ogólnie chyba lepiej czyścić z polskich znaków.

Ba... Gdyby to tylko ode mnie zależało...
pyro
Nie wiem może jestem niemiły (niech ktoś mnie uświadomi?) albo jestem ninja, ale ludzie mają dziwną tendencję do ignorowania mnie.

W pierwszej odpowiedzi podałem Ci działające rozwiązanie, które jest lepsze niż to, które wykorzystałaś potem z co najmniej dwóch przyczyn.

No to teraz życzę powodzenia w szukaniu bugów jak klient będzie na Ciebie krzyczał, że coś nie działa, tak jak powinno.

Pozdrawiam.
wNogachSpisz
A kodowanie?
Co jeśli np. plik skryptu php z wyrażeniem regularnym zakoduejsz w utf-8,
a walidowany tekst będzie zakodowany przykładowo w iso-8852 ?
JoShiMa
Cytat(pyro @ 13.04.2011, 23:04:35 ) *
Nie wiem może jestem niemiły (niech ktoś mnie uświadomi?) albo jestem ninja, ale ludzie mają dziwną tendencję do ignorowania mnie.

Nie. Po prostu Twoje rozwiązanie, wbrew temu co Ci się wydaje, nie działa i już. Co z resztą napisałam.

Cytat(wNogachSpisz @ 13.04.2011, 23:08:15 ) *
A kodowanie?
Co jeśli np. plik skryptu php z wyrażeniem regularnym zakoduejsz w utf-8,
a walidowany tekst będzie zakodowany przykładowo w iso-8852 ?

Bez obaw.
wNogachSpisz
Cytat(JoShiMa @ 14.04.2011, 01:50:57 ) *
Bez obaw.

A to ciekawe, bo właśnie to testuję i:

źródło: utf-8
skrypt: utf-8
rezultat: żaden polski znak nie został wycięty, skrypt działa OK

źródło: utf-8
skrypt: iso-8859-2
rezultat: wcina wszystkie polskie znaki za wyjątkiem ź oraz ł

źródło: iso-8859-2
skrypt: iso-8859-2
rezultat: żaden polski znak nie został wycięty, skrypt działa OK

źródło: iso-8859-2
skrypt: utf-8
rezultat: wcina wszystkie polskie znaki za wyjątkiem ź oraz ł

Podsumowując:
Totalna kaszana, brud, smród, nędza, ubóstwo, płacz i zgrzytanie zębów :-]
JoShiMa
Czy ty umiesz czytać? Bez obaw znaczy, taka ewentualność nie ma prawa nastąpić.
wNogachSpisz
Cytat(JoShiMa @ 14.04.2011, 02:06:47 ) *
Czy ty umiesz czytać? Wstaw sobie w kodowaniu utf-8 dokładnie ten tekst:

the way » :photoschau on we heart it / visual bookmark #8765543

i przetestuj.

Czy ty umiesz myśleć?

Ten tekst to tylko PRZYKŁAD

Zakładam, że dla autora tematu (jak i przypadkowych czytelników) cenne jest, by skrypt radził sobie z każdymi innymi danymi wejściowymi.
Chyba że jestem w błędzie, to przepraszam.
pyro
Cytat(JoShiMa @ 14.04.2011, 01:50:57 ) *
Nie. Po prostu Twoje rozwiązanie, wbrew temu co Ci się wydaje, nie działa i już. Co z resztą napisałam.


To ja mam jakiś inny interpreter niż Twój? Bo u mnie ten sam kod dokładnie skopiowany z mojego postu działa wyśmienicie.
JoShiMa
Cytat(wNogachSpisz @ 14.04.2011, 01:16:50 ) *
Zakładam, że dla autora tematu (jak i przypadkowych czytelników) cenne jest, by skrypt radził sobie z każdymi innymi danymi wejściowymi.

Ja jestem autorem wątku. Zapędziłeś się.
wNogachSpisz
Cytat(JoShiMa @ 14.04.2011, 10:18:43 ) *
Ja jestem autorem wątku. Zapędziłeś się.

Poniekąd.
Problem w tym, że jest to forum publiczne, istnieje duża szansa, że ktoś kiedyś będzie miał podobny problem i uzyje powyższego rozwiązania, które to rozwiązanie mu nie zadziała właśnie ze względu na kodowanie..
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.