è stata fatta una discussione lunghissima tempo fa per trovare un espressione regolare che riuscisse a validare un'url senza ambiguità e non mi ricordo se alla fine ne era stata trovata una all'altezza.

Validare un'url è cosa moooolto complicata. Io avevo tratto da quella discussione questa funzione:

function IsUrl( $valore ){
$er = "/^((http|https|ftp):\/\/|[w]{3}[0-9]{0,1}\.)([a-zA-Z0-9]([a-zA-Z0-9\-_]+\.|[a-zA-Z0-9\-_]+|)+[a-zA-Z0-9]\.[a-zA-Z]{2,6})(:[0-9]{1,5}|)(\/.{0,1024}|)$/i";

return (preg_match($er, $valore));
}


come vedete voi stessi la regex non è proprio delle più semplici

byezzz