kontrola správnosti url

Jak kontrolujete správnost zadání url ve formuláři?

Snažím se najít nějak dobrý způsob, ale na internetu toho moc není. našel jsem na regularnivyrazy.info regulární výraz, který mi nefunguje:

if (eregi("(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)?((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.[a-zA-Z]{2,4})(\:[0-9]+)?(/[^/][a-zA-Z0-9\.\,\?\'\\/\+&%\$#\=~_\-@]*)*", $str)) {
return true;
} else { return false; }

taky jsem zkoušel parse_url() - ta funkce zase nefunguje, pokud uživatel zadá třeba jen http:// a nedaří se mi chybu obejít pomocí if()

díky za jakoukoliv radu.
já jsem našel tohle, bez záruky
^(http|https|ftp)\://((([a-zA-Z0-9\-]+\.){1,}[a-zA-Z]{2,4})|(localhost))(:[0-9]+){0,1}(/[a-zA-Z0-9\-\_\,\./\+&­\$#\=~]+)*$
Ohledně kontroly správnosti emailu a url se říká - ať uděláš sebelepší reg. výraz, vždycky příjde někdo a najde ti v něm chybu.
A když se nad tím zamyslíš, ani to nemá smysl se s tím moc bavit protože jestli to chce někdo obelstít, klidně dá http://www.blah-blah-blah.com a reg. výrazy jsou krátké.
Takže ani tak není důležité kontrolovat jeslti ta url splňuje všechny podmínky a omezení, ale spíš jen nějak jednoduše prověřit jestli to aspoň jako url vypadá, aby nezadal třeba kjalsfklasf.

Reg. výrazy na kontrolu URL se dost komplikují například tím, že na konci může být otazník a za ním prakticky skoro cokoliv...