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
<?php
if(!preg_match('/^(http|ftp|https)://([-a-z0-9@:]+.)+([a-z]).*+[a-ZA-Z0-9]+[/.gif|/.jpg|/.png]+$/i', $link)) ?>
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)
<?php
$extensions = array('jpg','jpeg','gif','png'); if (FALSE===$url_info) {
// komunikat o złym url
}
else {
$dot = strrpos($url_info['path'], '.'); if (!$dot) {
// komunikat o złym url, jezeli kropka jest pierwsza to tez zle
}
$ext = substr($url_info['path'], $dot+1
); // zle rozszerzenie
else
// zrob cos
}
?>
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.