![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Czesc, mam prosta funkcje do walidacji:
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 |
|
|
![]()
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ń. -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
czesc, pomysly sa spoko-ale sprowadza sie to do mojego poczatkowego pytania - jak wykryc znaki? zeby zrobic str_replace - to przeciez musze wiedziec czego str_replace - awiec musze mu podac poprawne/niepoprawne znaki jako argument. Majac String:
124iyjhgfyhr;0989ug jak ja moge wykryc ze poprawne to sa 124iyjhgfyhr0989ug ? rozumiesz o co mi chodzi? Przyrzalam sie blizej temu preg_replace i majac taki kod:
to mi nie zadziala jak powinno. zwroci mi "this is only a test ?". A wg tego powinien chyba zwrocic sam '?' W dokumentacji pisza: If matches are found, the new subject will be returned, otherwise subject will be returned unchanged or NULL if an error occurred. czyli on nie znajduje matches? czy on traktuje $subject jako calosc, tzn szuka matches dla calego $subject? No bo ja potrzebuje czegos co by sprawdzalo znak po znaku.. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
A może:
Ten post edytował redeemer 30.11.2011, 16:11:34 -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
1. Ty definiujesz, które znaki są prawidłowe
2. masz funkcję, która ma jedną wartość jako parametr, jak również zwraca jedną wartość Rozumiem, że funkcja zwróci true, jeśli parametr zawiera tylko i wyłącznie poprawne znaki i false jeśli parametr będzie zawierał choć jeden niepoprawny znak, to zaczynam się zastanawiać, jak z funkcji (skonstruowanej jak na listingu) chcesz zwrócić listę niepoprawnych znaków zawartych w parametrze? Po mojemu masz dwa rozwiązania: 1. zwracasz tablicę zawierającą dwa elementy 2. przekazać do funkcji parametr przez referencję - ale to zniszczy wartość oryginalną, także poza funkcją 3. zwrócić listę znaków niedozwolonych i poza funkcją testować, czy ciąg znaków jest pusty (i wtedy mamy TRUE) czy nie (dostajemy FALSE) - ale to jest dodatkowy narzut przy teście, np. na wykonanie funkcji strlen Który wybierzesz - zależy od Ciebie. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 366 Pomógł: 0 Dołączył: 2.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
@abort - nie chodzilo mi o rady jak zmienic funkcje, czy ma ona zwracac false, true, dwie wartosci czy 10. Umiem sobie zmodyfikowac kod tak, by dzialal jak potrzebuje. To o co pytalam, to jak ZNALEZC niewlasciwe znaki.
redeemer - dzieki, wlasnie tego szukalam! ![]() pzdr, misty |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.06.2025 - 10:13 |