Originariamente inviato da AnĒkin
I casi vanno separati con gli or tipo (http|https|ftp). Come hai fatto tu nella prima parentesi ricerca tutta la stringa contenuta li dentro.
Vedi che puoi raggruppare ulteriormente http e https scrivendo https? (s? dice che la s č opzionale, 0 o 1 occorrenza) dato che si differenziano per una sola lettera. In giro dovresti trovarne di regex giā fatte cmq abbozzandone una semplice comincerei con
codice:
$rex = '/^((https?|ftp):\/\/)?www\.\S+$/i' ;
come vedi ho raggruppato anche "://", dato che si ripeteva, ed ho messo opzionale tutta la prima parentesi ((https?|ftp):\/\/)?, mentre č obbligatorio sempre il www. e infine con \S+$ gli dico di cercare tutti i caratteri che siano diversi dai caratteri invisibili (spazio, a capo, tabulazione, etc), questo dovrebbe permettere anche la validazione di eventuali querystring.
Adesso provo, hai messo www. obbligatorio, ma uno potrebbe usare "http://" che č giā predefinito nel campo senza usare www., che dici?

Ho messo cosė ma da errore

//valida URL
if($url)
if (!(ereg("/^((https?|ftp):\/\/)?www\.)\S+$/i", $url))
echo "inserire un'URL valido"