Strona 1 z 1
php - preg_match nie wykrywa apostrofu
: 04 maja 2009, 00:58
autor: sigo
Próbuję utworzyć wyrażenie regularne dla funkcji
preg_match w php, by przefiltrować dane. ¦ciślej mówiąc, chcę pozwolić jedynie na użycie określonej grupy znaków.
Problem pojawił się, gdy chcę wykryć, czy użyto apostrofu.
Używam kodu
Gdy wyrażenie zostanie zmodyfikowane do postaci
apostrof jest wykrywany, ale powyższy warunek pozwala na użycie wszystkich znaków - a nie na tym mi zależy.
Czy ktoś jest w stanie mi poradzić, co powinienem zmodyfikować, by uzyskać pożądany efekt?
Z góry dziękuję za odpowiedzi.
: 04 maja 2009, 01:00
autor: lis6502
Spróbuj zaescapować apostrof backslashem do postaci:
\'
Co prawda nie jest on słowem kluczowym wyrażeń regularnych, ale może być dla samego PHP.
: 04 maja 2009, 01:01
autor: sigo
Znak karetki niestety też nie pomaga.
: 04 maja 2009, 01:15
autor: lis6502
Przejrzałeś
pomoc? Miałem na myśli przekształcenie wyrażenia do postaci
if(preg_match("/^\[\'\]\/\+\$"
Rozumiem że to właśnie tych znaków chcesz się pozbyć. Napisz najlepiej swoje kryteria filtrowania i coś się pomyśli.
: 04 maja 2009, 01:19
autor: Stawi
sigo pisze:Problem pojawił się, gdy chcę wykryć, czy użyto apostrofu
A nie lepiej zrobic strpos() ? Po co uzywac Wielkiego prega do szukania znaku...
A tobie chodzi chyba o cos takiego:
gdzie ZNAKI to wypisane znaki na jakie chcesz pozwolic. Eskejpowac trzeba duzo roznych, ale nie apostrof. Latwo mozna sprawdzic co:
Kod: Zaznacz cały
$znaki = preg_quote("1234567890abcdef")]+$/", ..);
Osobiscie uwazam ze lepiej sprawdzic czy jakis niedozwolony znak nie wystapil. czyli zamiast /^[abc]+$/ wpisac /[^abc]/ i wynik potem zanegowac - dziala wydajniej

: 04 maja 2009, 01:31
autor: sigo
Z manualem na stronie php zapznałem się; nic nie znalazłem.
Chcę użyć prega, gdyż liczba dozwolonych znaków jest dosyć spora.
Poradziłem sobie z większością - pozostał jedynie apostrof i cudzysłów.
: 04 maja 2009, 01:43
autor: lis6502
Spróbuj wpisać je tak
\x22 cudzysłów
\x27 apostrof
: 04 maja 2009, 01:46
autor: sigo
Bez efektu...
Eh, przeszkadza ten początkowy znak ^, który jednak musi być...
: 06 maja 2009, 02:19
autor: Stawi
sigo pisze:Bez efektu...
Eh, przeszkadza ten początkowy znak ^, który jednak musi być...
Zauwaz gdzie on sie znajduje:
/^[...]/ -> na poczatku musi byc znak z nawiasow kwadratowych
/[^...]/ -> gdziekolwiek znak ktory NIE jest w nawiasach kwadratowych ]na prawdę[/b] duzo znakow, ktore moga byc, to chyba lepiej sprawdzic te pare ktore nie moze?
A tak totalnie z glupa - jestes pewien ze kodowanie wejscia i kodowanie skryptu jest takie samo?
Spróbuj wklepac lancuch do testow na sztywno w kodzie - dla pewnosci ze jest to samo kodowanie.