|
php - preg_match nie wykrywa apostrofu
sigo - 04-05-2009 00:58
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 if(preg_match("/^[']/+$", ...
Gdy wyrażenie zostanie zmodyfikowane do postaci if(preg_match("/[']/", ...
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.
lis6502 - 04-05-2009 01:00
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.
sigo - 04-05-2009 01:01
Znak karetki niestety też nie pomaga.
lis6502 - 04-05-2009 01:15
Przejrzałeś pomoc? Miałem na myśli przekształcenie wyrażenia do postaci
Rozumiem że to właśnie tych znaków chcesz się pozbyć. Napisz najlepiej swoje kryteria filtrowania i coś się pomyśli.
Stawi - 04-05-2009 01:19
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:
if(preg_match("/^[ZNAKI]+/$", ...
gdzie ZNAKI to wypisane znaki na jakie chcesz pozwolic. Eskejpowac trzeba duzo roznych, ale nie apostrof. Latwo mozna sprawdzic co:
$znaki = preg_quote("1234567890abcdef"); if preg_match("/^[$znaki]+$/", ..);
Osobiscie uwazam ze lepiej sprawdzic czy jakis niedozwolony znak nie wystapil. czyli zamiast /^[abc]+$/ wpisac /[^abc]/ i wynik potem zanegowac - dziala wydajniej ;)
sigo - 04-05-2009 01:31
Z manualem na stronie php zapznałem się; nic nie znalazłem.
Chcę użyć prega, gdyż liczba dozwolonych znaków jest dosyć spora. a-z ą-ź 0-9 spacja . , ? ! & - ( ) ' "
Poradziłem sobie z większością - pozostał jedynie apostrof i cudzysłów.
lis6502 - 04-05-2009 01:43
Spróbuj wpisać je tak
sigo - 04-05-2009 01:46
Bez efektu... Eh, przeszkadza ten początkowy znak ^, który jednak musi być...
Stawi - 06-05-2009 02:19
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 ;)
I chodzilo mi o to drugie. Jak mozesz miec na prawdę 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.
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|