Probabilmente x e` un avariabile caricata con il value del campo, e quindi modificandola non viene caricato il campo.
Prova a modificare lo script cosi`:
codice:
function s(cc) {
var x = cc.value;
if(/^[0-9]{2}(\-|\/)[0-9]{2}(\-|\/)[0-9]{4}$/.test(x)) {
x = x.replace(/\//g, "-");
var y = x.split("-");
if((y[0]>31)|(y[1]>12))alert("Formato data errato")
} else {
alert("Formato data errato o campo vuoto. (n.b. E' possibile lasciare il campo vuoto!)");
cc.value='';
}
}
Naturalmente la chiamata dovra` essere conseguente, quindi (ad esempio):
<input type="text" .... onchange="s(this);">
NOTA: con le RE si puo` anche fare un controllo piu` accurato: guarda tra il link utili, ci sono link interessanti.
Ciao
Michele