Originariamente inviato da mordillone
prova a testare anche lo stato undefined.
Ora mi sfugge la sintassi esatta, dovresti poi controllare in rete se ci vuole undefined con o senza apici:

if (f.messaggio.value.length != 0 &&
(f.messaggio.value.length != undefined || f.messaggio.value.length != 'undefined')
){
Ho messo cosi, ho provato undefined con e senza apici ma da sempre alert, è sufficiente che nel campo inserisco anche un solo carattere qualsiasi e poi clicco su Invia esce l'alert anche se non ho inserito un url

codice:
if (f.messaggio.value.length != 0 && (f.messaggio.value.length != 'undefined' || f.messaggio.value.length != 'undefined')){
var reg = new RegExp("^((http(s)?:\/\/|ftp:\/\/)|(www\\.))([a-z0-9][-.a-z0-9]*)(\\.[a-z]{2,4}[/?]?)([/?][-_~;:.,\\'*^+()=!|?£§$%&#A-Za-z0-9/]*)?$");                                             
if (!f.messaggio.value.match(reg)){                                                                                                       
f.messaggio.style.backgroundColor='yellow'
alert("Nel Testo hai inserito un' URL non valido")
f.messaggio.focus();
return false;
}
 }
return true;