Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] czy eregi() ma rację?
Forum PHP.pl > Forum > Przedszkole
EdeusEx
dlaczego funkcja zwraca mi FALSE?

  1. <?php
  2. if (!eregi("^[a-zA-Z0-9 _:]{5,15}$", strtolower($author)) || !eregi("^[a-zA-Z0-9 _:]$", strtolower($title))) { return false; } else {
  3.  //dalej
  4. }
  5. ?>


Zmienna $author to Admin
Zmienna $title to RE: Test message

Ja tutaj nie widzę nic, co by prowadziło do FALSE...
devnul
nie jestem pewien czy ereg rozumie ^ i $, jeśli tak to nie wiem co to może być (może sprawdź czy zmienne które testujesz faktycznie zawierają to co powinny)
a poza konkursem kilka uwag:
1) czemu taki zapis a-zA-Z skoro używasz eregi - czyli metody wyszukiwania według wzorca nie zwracającej uwagi na wielkość liter
2) czemu ereg a nie preg - PCRE jest znacznie szybsze, nie mówiąc już o większych możliwościach
EdeusEx
Dobrze, zmieniłem na to:

  1. <?php
  2. if (!preg_match("(^[a-z0-9_: ]{5,15}$)", strtolower($author)) || !preg_match("(^[a-z0-9_: ]$)", strtolower($title))) { return false; } else {
  3. //dalej
  4. }
  5. ?>


i dalej zwraca FALSE

I tak, sprawdzałem. Zmienne zawierają to, co powinny.
nithajasz
A przypadkiem te strtolower nie przeszkadza pregom?
devnul
bo nie dostosowałeś składni do prega
  1. <?php
  2. if (preg_match("@^[a-z0-9_: ]{5,15}$@i", $author)===false || preg_match("@^[a-z0-9_: ]$@i", $title)===false) { return false; } else {
  3. //dalej
  4. }
  5. ?>

i powinno śmigać (btw właśnie sobie pomyślałem że zamiana ! na ===false w poprzednim wypadku też by pomogła bo u Ciebie to przecierz także pasowało a indeks znalezionego znaku wynosił zero czyli przy prostym porównaniu false)
@nithajasz: strtolower nie przeszkadza w niczym bo niby jak? właściwie to był nawet zbędny bo była to funkcja olewająca wielkość znaków, dlatego też w moim przykładzie wywaliłem dziada
marcio
Cytat
2) czemu ereg a nie preg - PCRE jest znacznie szybsze, nie mówiąc już o większych możliwościach

Jesli mnie pamiec nie myli to ereg()/eregi() ma specjalne znaki wpisujac bajt zerowy funkcja skonczy dzialanie i mozna wpisac co sie chce smile.gif wiec preg_match() jest lepszy
pyro
a ja zrobiłem tak, że nawet z eregi działa:

  1. <?php
  2. if (!eregi("[a-z0-9 _:]{5,15}", $author) || !eregi("[a-z0-9 _:]", $title))
  3. ?>


a tak btw. po jaka cholere dawałeś A-Z i strtolower() skoro to jest funkcja eregi smile.gif

i nawet znalazłem dlaczego u Ciebie EdeusEx zwracało false, nie dawałeś kwantyfikatora przy $title, poprawiony kod:

  1. <?php
  2. if (!eregi("^[a-zA-Z0-9 _:]{5,15}$", strtolower($author)) || !eregi("^[a-zA-Z0-9 _:]+$", strtolower($title)))
  3. ?>


jednak radze usunac te A-Z i strtolower bo po co zaśmiecać kod tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.