Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> preg_match zwracajacy znak ktory wystapil a nie powinien
misty
post
Post #1





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

Ostrzeżenie: (0%)
-----


Czesc, mam prosta funkcje do walidacji:

  1. public function checkSimpleField($value) {
  2.  
  3. $safeChars = false;
  4. $pattern = "/^[a-zA-Z0-9-,_ ()]+$/";
  5.  
  6. if (preg_match($pattern, $value) == 1) {
  7. $safeChars = true;
  8. }
  9. return $safeChars;
  10. }


Dziala ok, ale ja bym chciala dostac jeszcze jakos nielegalne znaki (czyli te spoza $pattern) ktory wystapily. Czy jesli $value bedzie mialo wartosc: ";";; no to jak wykryc ze to wlasnie ";";; sa tymi niedozwolonymi znakami? Mam nadzieje ze rozumiecie o co mi chodzi.

pzdr,
misty
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Problem w tym, że byś musiała znaleźć wszelkie możliwe wystapienia funkcji sprawdzającej, bo skończy się przebudową lekką tego co funkcja zwraca. W chwili obecnej masz zwracane true lub false... A powinno w przypadku wykrycia znaków niewłaściwych zwrócić także to, co uznało za nieprawidłowy wedle Twojego pomysłu. Możesz to rozwiązać na 2 sposoby:
- lekka przebudowa obecnej funkcji, która po prostu ze stringa bazowego usunie poprawne znaki
- większa, która zadziała na "odwrotnej" zasadzie niż obecna, bez użycia preg_match, ale z użyciem preg_replace.

Skupię się na tym drugim (bo pierwsze też można prosto z użyciem preg_replace osiągnąć).
- bierzemy string bazowy,
- usuwamy z użyciem preg_replace wszystkie prawidłowe znaki (zamieniamy je na pusty string),
- jeśli ostateczny string jest pusty, zwracasz że wszystko OK
- jeśli ostateczny string nie jest pusty, to znaczy, że złapał niedozwolone i zwracasz sygnał błędu + możesz zwrócić dodatkowo string pozostały z operacji usuwania... Zauważ, że teraz musisz w funkcjach walidujących uważac CO zwraca sprawdzenie. Jeśli będzie to dana złożona (tablica lub obiekt) mamy do czynienia z błędem. Jeśli bool, to niemal na mur beton będzie to powodzenie.

Możesz dla jednolitej struktury zwrócić od razu daną złożoną, gdzie pierwszy parametr będzie oznaczał powodzenie lub nie, a drugi ewentualną pozostałość po czyszczeniu z dozwolonych (co jest IMHO prostsze do implementacji w już istniejącym kodzie). By było ładniej z pozostałością, możesz przykładowo użyć count_chars ( $pozostałe , 3 ), co zwróci od razu te znaki już jako unikalne, niezależnie od ilości wystąpień.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 11:04