codice:
<SCRIPT LANGUAGE="JavaScript">
<!--
var Unita = new Array("","uno","due","tre","quattro","cinque","sei","sette","otto","nove","dieci","undici","dodici","tredici","quattordici","quindici","sedici","diciassette","diciotto","diciannove")
var Decin = new Array("","","vent","trent","quarant","cinquant","sessant","settant","ottant","novant")
var Decine = new Array("","","venti","trenta","quaranta","cinquanta","sessanta","settanta","ottanta","novanta")
var Fase = new Array("","mila","milioni","miliardi")
var Fase1 = new Array("uno","mille","unmilione","unmiliardo")
function Num2Let(Numero) {
if (Numero==0) return "zero";
Numero = String(Numero);
// scompongo il numero
passo = 0
r = ""
while(Numero!="") {
// prendo fino a tre cifre a destra
l = Numero.length;
if (l>3) {
Parziale = Numero.substr(l-3);
Numero = Numero.substr(0,l-3);
} else {
Parziale = Numero;
Numero = "";
}
// aggiungo zeri a sinistra
while(Parziale.length<3) { Parziale="0"+Parziale }
// caso: uno
if (Parziale=="001") {
p = Fase1[passo]
} else {
// divido le tre cifre e trasformo in numero
c = parseInt(Parziale.charAt(0),10);
d = parseInt(Parziale.charAt(1),10);
u = parseInt(Parziale.charAt(2),10);
p = ""
// centinaia
if (c>0) {
if (c>1) p+=Unita[c];
p+="cento";
}
// decine
if (d>0) {
if (d>1) {
if (u==8||u==1) { // unita' che iniziano per vocale
p+=Decin[d];
} else {
p+=Decine[d];
}
} else {
u+=10; // comreso fra 1 e 19
}
}
// unita' ( fino al 19 )
if (u>0) {
p+=Unita[u];
}
// aggiungo il suffisso
p+=Fase[passo];
}
// metto il parziale davanti al risultato e incremento passo
r = p+r;
passo++;
}
return r
}
//-->
</SCRIPT>
<form>
<input type=text onKeyUp="this.value=this.value.replace(/\D/g,'').replace(/^0+/,'')
; this.form.lettere.value=Num2Let(this.value);">
<input type=text name=lettere size=120>
</form>
ps: non ho avuto tempo di ottimizzarlo... cosi' pero' e' piu' leggibile