Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] preg_match i link do zdjęcia
Forum PHP.pl > Forum > Przedszkole
legalizetrawka
Witam,
chciałbym aby wyrażenie regularne sprawdzało poprawność linku zaczynającego się od http:// ftp:// lub https:// a kończyło .gif .jpg lub .png
mam coś takiego, ale niestety nie działa:
Wyr. regularne to dla mnie zawsze zmora :<
  1. <?php
  2. if(!preg_match('/^(http|ftp|https)://([-a-z0-9@:]+.)+([a-z]).*+[a-ZA-Z0-9]+[/.gif|/.jpg|/.png]+$/i', $link))
  3. ?>
blooregard
Cytat
[/.gif|/.jpg|/.png]


Chyba powinno być w tę mańkę:
[\.gif|\.jpg|\.png]
legalizetrawka
  1. <?php
  2. Warning: preg_match() [function.preg-match]: Compilation failed: range out of order in character class at offset 52
  3. ?>
zeulus
Cytat(legalizetrawka @ 5.07.2009, 10:46:53 ) *
Witam,
chciałbym aby wyrażenie regularne sprawdzało poprawność linku zaczynającego się od http:// ftp:// lub https:// a kończyło .gif .jpg lub .png
  1. <?php
  2. if(!preg_match('/^(http|ftp|https)://([-a-z0-9@:]+.)+([a-z]).*+[a-ZA-Z0-9]+[/.gif|/.jpg|/.png]+$/i', $link))
  3. ?>


Musisz poczytać sobie na temat wyrażeń regularnych, bo mieszasz. Albo poszukaj na google jakiś gotowych wzorców.

. -> dowolny znak
.* -> dowolny znak dowolną ilość razy
.+ dowolny znak przynajmniej jeden raz

[-a-z0-9@:]+ -> jeden, lub więcej znaków z tego zakresu
[-a-z0-9@:]+. -> j.w. plus _dowolny_ znak po tym
([-a-z0-9@:]+.)+ -> jedna, lub więcej grup znaków powyższych -> zatem tekst d"e$a! też będzie poprawny

([a-z]).* -> ten sam błąd: "weź jedną literę z zakresu a-z i po tym dowolną ilość dowolnych znaków
([a-z]).*+ -> tego nie wiem jak zinterpretować ;]

[/.gif|/.jpg|/.png]+ => pomijając źle ustawione znaki escape'u, to powinno być: \.(gif|jpe?g|png) -> bez nawiasów kwadratowych

Jeżeli się nie znasz na wyrażeniach regularnych i nie chce Ci się googlać, spróbuj użyć funkcji parse_url" title="Zobacz w manualu PHP" target="_manual i poczytaj komentarze w manualu. Funkcja zwróci ciekawe dane, wśród nich otrzymasz element tablicy path -> to Cię interesuje, możesz później już na wiele sposobów zrobić wyszukiwanie rozszerzenia na końcu tej ścieżki (np. jeżeli nie umiesz wyr. reg. to użyj operacji na stringach -> strrpos" title="Zobacz w manualu PHP" target="_manual i strrpos($path, '.') w połączeniu z substr" title="Zobacz w manualu PHP" target="_manual)

  1. <?php
  2. $extensions = array('jpg','jpeg','gif','png');
  3. $url_info = parse_url($twoj_url);
  4. if (FALSE===$url_info) {
  5.  // komunikat o złym url
  6. }
  7. else {
  8.  $dot = strrpos($url_info['path'], '.');
  9.  if (!$dot) {
  10.    // komunikat o złym url, jezeli kropka jest pierwsza to tez zle
  11.  }
  12.  $ext = substr($url_info['path'], $dot+1);
  13.  if (!in_array($ext, $extensions))
  14.    // zle rozszerzenie
  15. else
  16.   // zrob cos
  17. }
  18. ?>


Ale faktem jest, że warto się nauczyć wyrażeń regularnych -> są one o wiele bardziej wyrafinowanym narzędziem niż zwykłe operacje na stringach i dają o wiele więcej możliwości.
legalizetrawka
Dzięki za obszerną odpowiedź. Trzeba będzie wziąć się i ogarnąć;)
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.