Newsgroup: it.comp.lang.javascript
Titolo: solo numeri

Salve a tutti. Ho questo problema:
vorrei fare in modo che un input type accetti solo numeri, la virgola come
separatore dei decimali e che venga inserito il punto come separatore delle
migliaia.
QUALCUNO POTREBBE AIUTARMI !?!?!?!
Grazie in anticipo

 migliaia.
Per far inserire solo i numeri puoi usare questa func da chiamare nel tag
input come onKeyPress:
function verifica_numero() {
if (event.keyCode >= 48 && event.keyCode <= 57) {
return (true);
} else {
return (false);
}
}


if(!tuoValore.search(/^\d{1,3}(\.\d{3})*(,\d{1,2})?$/)){
    alert("Formato errato");
}
Cosi' e' impostata per due decimali al massimo (credo che tu lo volessi per
un formato "valuta").

 
Io ero arrivato a questa con l'unica differenza sostanziale che avevo 
eliminato lo zero come primo carattere.
Ti chiedo: come mai in IE funziona bene, mentre in N4/Moz se clicco 
ripetutamente su "Clicca" (cioe' eseguo ripetutamente il controllo pur 
senza modificare il valore in input)  ottengo true/false/true/false... ?
Non ho idee in proposito :-O
<head>
<head>
<title>Input formattati</title>
<script type="text/javascript">
<!--
var re=/^[1-9]\d{0,2}(\.\d{3})*(,\d+)$/g;
function funz()
   {
   with (document.modulo)
      {
      risultati.value="-"+re.test(numero.value)+"-"+"\n\n"+re;
      }
   }
//-->
</script>
</head>
<body>
<form name='modulo' id='modulo'>
<input type='text' name='numero' value='20.223.636,999' /> <br />
<input type='button' value='Clicca' onclick='funz()' /> <br />
<textarea name='risultati' rows='10' cols='60' class=''></textarea>
</form>
</body>
</html>
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
------------------------------------------------------------------------
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
 ----> itALY = it <----

       risultati.value="-"+re.test(numero.value)+"-"+"\n\n"+re;
Lo stesso comportamento mi risulta anche in IE.
Ora cerco di trovare una spiegazione. Intanto la soluzione:
Il flag g non serve se cerchi il match sulla stringa nella sua interezza (^
... $), se lo togli tutto funziona.
Tutto funziona anche se usi invece di test il corrispettivo metodo di
String: tuaStringa.search(re) (anche se mantieni il flag).

 String: tuaStringa.search(re) (anche se mantieni il flag).
Si, quando ho visto quel comportamento ho lasciato perdere, magari si 
puo' ancora migliorare :-)


[ MEGACUT ]
Eccomi qua.
Per l'esempio uso exec (equivalente di test ma che ci restituisce piu'
informazioni).
Considera questo:
var src = "Cantami o diva del Pelide Achille l'ira funesta.";
var re = /\w+/g;
var arr;
while ((arr = re.exec(src)) != null)
document.write(arr.index+"-"+arr.lastIndex+"&nbsp;"+arr+"<br>");
Questo, che funziona come dovrebbe solo con il flag g (pena un bel loop), ci
chiarisce tutto.
In poche parole rieseguendo metodi di RegExp in successione otteniamo che
una specie di "cursore" o "puntatore" cambi posizione nella stringa per
restituirci i match successivi.
Nel tuo esempio il flag g costringeva una seconda chiamata alla stessa
RegExp (perche' era una variabile globale).
Se tu avessi ridichiarato la RegExp (anche come letterale come hai fatto)
all'inizio della funzione, sarebbe stata sempre una RegExp "pulita" e con il
"puntatore" all'inizio e tutto sarebbe funzionato.
Se tu avessi, con la variabile locale, eseguito due volte in successione il
metodo test all'interno della funzione, avresti comunque avuto come
risultati true e false.
L' "errore" stava proprio nell'inutile flag g.
Come dicevo prima questi comportamenti non si hanno usando i corrispettivi
metodi di String (match e search) perche' non viene "modificata" a runtime
l'espressione regolare.

, 
ascartab...@codice.it
 says...

Miiiii e sono stato li li per togliere la g quando mi so reso conto che 
cmq non serviva, ma... "tanto danno non ne fa" :-)
Tnx Andrea
