Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenie regularne
Forum PHP.pl > Forum > PHP
jerome
Napisałem sobie funkcję do wyciągania parametrów z formularzy za pomocą wyrażeń regularnych. Problem jest taki że działa ona tylko wtedy gdy nazwa parametru jest jednoliterowa.
Kod funkcji to:
  1. function getHiddenParam($strona, $paramName)
  2. {
  3. $pattern = '/name=\"'.$paramName.'\" value=\"([a-z0-9]+)\"/';
  4. //echo "wzorzec: ".$pattern."<br>";
  5. if(preg_match_all($pattern, $strona, $matches))
  6. return $matches[1][0];
  7. return false;
  8.  
  9. }

dla takiego ciągu:
  1. <input type="hidden" name="b" value="452" /><input type="hidden" name="hash"
  2. value="s243d45f6f" />

wywołanie
  1. $result = getHiddenParam($ciag, 'b')
zwróci 452
ale dla
  1. $result = getHiddenParam($ciag, 'hash')

funkcja zwróci false.
Jak poprawić to wyrażenie aby działało ono tak jak chcę?

I drugie pytanie (aczkolwiek nie potrafię dostarczyć do niego działającego - a właściwie niedziałającego kodu) dotyczy dziwnego zachowania na jakie natrafiłem wczoraj podczas pisania tej funkcji. Jeżeli w ifie w funkcji jako pattern dostarczałem zbudowany na miejscu wzór czyli miałem:
  1. if(preg_match_all('/name=\"'.$paramName.'\" value=\"([a-z0-9]+)\"/', $strona, $matches))

to funkcja nie działała. Byłem wtedy pewien że wyrażenie jest dobre więc przeniosłem je do zmiennej $pattern i dopiero wtedy przekazałem jako parametr do funkcji - i zaczęło działać (przynajmniej dla 1 literowych nazw). Czy wie ktoś czym to jest spowodowane? Zaznaczam, że teraz nie udało mi się spowodować takiego zachowania ale od tego czasu coś zmieniałem w tej funkcji.
Noidea
Przecież działa: http://ideone.com/SdwRW

Jesteś pewien, że między name="hash" a value="s243d45f6f" masz tylko i wyłącznie jedną spację?
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.