ďťż
 
 
   php - preg_match nie wykrywa apostrofu
 
 

Tematy

 
    
 

 

 

 

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • minister.pev.pl

  •  

     


     

     
    Copyright 2003. MĂłj serwis