Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] preg_match i link do zdjęcia
legalizetrawka
post 5.07.2009, 09:46:53
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 29.06.2009

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


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. ?>
Go to the top of the page
+Quote Post
blooregard
post 5.07.2009, 10:44:22
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Cytat
[/.gif|/.jpg|/.png]


Chyba powinno być w tę mańkę:
[\.gif|\.jpg|\.png]


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
legalizetrawka
post 5.07.2009, 10:50:55
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 29.06.2009

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


  1. <?php
  2. Warning: preg_match() [function.preg-match]: Compilation failed: range out of order in character class at offset 52
  3. ?>
Go to the top of the page
+Quote Post
zeulus
post 5.07.2009, 12:41:10
Post #4





Grupa: Zarejestrowani
Postów: 25
Pomógł: 3
Dołączył: 17.05.2004
Skąd: Nowhere Land

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


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.


--------------------
Google prawdę mówi, względów się wyrzeka...
Go to the top of the page
+Quote Post
legalizetrawka
post 5.07.2009, 22:34:17
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 29.06.2009

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


Dzięki za obszerną odpowiedź. Trzeba będzie wziąć się i ogarnąć;)
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 16.06.2025 - 23:34