Newsgroup: it.comp.lang.javascript
Titolo: come controllare se vine inserito un numero

io uso questo codice per vedere se viene inserito un numero in una form,
perň cosě controlla solo se č intero. A me interessa controllare anche i
numeri con la virgola (es 2,5) che funzione si usa?
function chknum(string,n){
if(isNaN(string)){
alert("Valore non valido! Inserire un numero")


è giusto ...perchè 2,5 è una stringa non è un numero ........
il numero è 2.5    .....
andreotta fabiano
 WebMªster ATI POWER s.n.c.
 
andr...@atipower.it
 
http://www.atipower.it
    -new-
 
http://www.aticommerce.com
 
http://www.afdsoftware.freeweb.org
 
http://www.jsdir.com

Questa è un po' più completa, gestisce decimali (se passi 2° parametro=1) e
puoi dirgli il separatore dei decimali (3° parametro, se non lo passi usa
. )
Vedi se può tornarti utile.
function isnumeric(s,dec,separatore) {
  //(c) Cristiano Larghi 
c.la...@executive.it
  if (s==null) return true;
  //dec=0 NON considera decimali, altrimenti li considera
  //separatore: se non lo indico prende il . altrimenti usa quello indicato
come separatore
  if
((dec!="0")&&((String("1234567890").indexOf(s.substr(0,1))==-1)||(String("12
34567890").indexOf(s.substr(s.length-1,1))==-1))) return false;
  separatore=(String(separatore)=="undefined")?".":separatore;
  var filtronumber="1234567890"+((dec=="0")?"":separatore);
  s=s.replace(/,|\./g,separatore);
  for (var x=0;x<s.length;x++)
    if (filtronumber.indexOf(s.substr(x,1))==-1) return false;
   if (dec!="0")
     if
((s.indexOf(separatore)!=-1)&&((s.substr(s.indexOf(separatore)+1).indexOf(se
paratore)!=-1))) return false;
  return true;
 }

   file://separatore: se non lo indico prende il . altrimenti usa quello


Esaggerato...
lo "scheletro" se non ricordo male era di Juliet e/o Hyperion =>cosě vedi
che continui a raccogliere quello che hai seminato!! :-)
Io ho aggiunto gestione decimali e separatore decimale a scelta.

 lo "scheletro" se non ricordo male era di Juliet e/o Hyperion =>così vedi


vedi che continui a raccogliere quello che hai seminato!! :-)
eccheme 'ccaaa! :)
hmm, non ricordo di aver partorito 'sta cosa... ma zze po' ffa'...
-- 
-----BEGIN GEEK CODE BLOCK-----
Version 3.1 (with proprietary extensions)
Comments: waiting for version 4.0 ;)
GE/M/S/O d- s:--- !a C++++()>$ UL P+>+++ L+>++ e w++>$ N++ o-- K- W++ O? 
M? V? PS++ PE- Y+>+++ PGP++ t+ 5? X++(+) R tv--  b++>++++ DI++ D++ G-- e 
h! !r xy**
------END GEEK CODE BLOCK------


Fai fai please, pendiamo tutti dai tasti della tua tastiera.....fai si che
accetti un numero si questo tipo 100.000,121   con "."   e virgola ","
grazie mille


Vero, questo perché la mia function controlla SE E' un numero (e col
separatore di migliaia non è più un numero).
A grandi linee, comunque, inserisci nella stringa "1234567890" anche . e ,
(punto e virgola) e (anche se la function modificata così non è il massimo)
dovrebbe funzionare (ripeto: a grandi linee perché non ho provato).

Però in questo modo ti accetterebbe anche 1.0.0.1,1 (considerando , come
separatore decimale), perché il controllo univocità viene fatto sul
separatore; gli altri caratteri possono essere ripetuti n volte e avere
posizione qualsiasi.
Mi sa che devi rifarti la function (ma, ripeto, non parliamo più di "come
controllare se viene inserito un numero" (perché col separatore di migliaia
NON è un numero).

virgola "," grazie mille
vediamo... allora, "100.000,121" sarebbe, espresso con una regexp:
/^(\d{1,3})(\.\d{3})*(?:(,\d*)|())$/
"100,000.121" (all'americana) sarebbe invece:
/^(\d{1,3})(,\d{3})*(?:(\.\d*)|())$/
senza separatore delle migliaia sarebbero rispettivamente:
/^(\d*)(?:(,\d*)|())$/
/^(\d*)(?:(\.\d*)|())$/
o ancora meglio:
/^(\d*)(?:([,\.]\d*)|())$/
non le ho provate ma dovrebbero funzionare... al momento non mi va di 
andare piů avanti di cosě...


 soluzione?
[]
Due funzioni la prima controlla se e' un numero per javascript (elimina
gli eventuali separatori delle migliaia prima del controllo e non ne
verifica la posizione); la seconda fa un controllo formale; ambedue
accettano i segni + e - e hanno un controllo per il separatore dei
decimali.
Dovrebbero funzionare.
Saluti, Paolo
-----------------------
<script type="text/javascript" language="javascript">
<!--
function ctrNum1(num,ctrSep){
  sep=(ctrSep)? '.':',';
 mig=(sep=='.')? ',':'.';
 if (num.indexOf(sep)==-1 || num.lastIndexOf(sep)>num.lastIndexOf(mig)){
  mig= new RegExp('\\'+mig,"g");
  num=num.replace(mig,'');
  num=num.replace(',','.');
 }
 if(isNaN(num)||num=='') num='errore';
document.forms.form1.text2.value=num*2;
document.forms.form1.text1.focus();
}
// -->
</script>
<script type="text/javascript" language="javascript">
<!--
function ctrNum(num,ctrSep,numDec){
 sep=(ctrSep)? '.':',';
 mig=(sep=='.')? ',':'.';
 pre='';
 if (num.substr(0,1)=='+' || num.substr(0,1)=='-') {
  pre=num.substr(0,1);
  num=num.substr(1);
 }
 if (numDec<=0){
  re=new RegExp('^\\d+$'); //
  re1=new RegExp('^\\d{1,3}(\\'+mig+'\\d{3})+$'); //
 } else {
  re=new RegExp('^\\d+\\'+sep+'\\d{'+numDec+'}$'); //
  re1=new
RegExp('^\\d{1,3}(\\'+mig+'\\d{3})+\\'+sep+'\\d{'+numDec+'}$'); //
 }
  if (!num.match(re) && !num.match(re1)) num='errore';
 document.forms.form1.text2.value=pre+num;
 document.forms.form1.text1.focus();
}
</head>
<body>
<FORM action="" method=POST id=form1 name=form1>
<INPUT type="text" id=text1 name=text1>
numDec<INPUT type="text" name=numDec value=2>
<INPUT type="checkbox" name=decimali>Spunta per il punto (.) come
separatore decimale
<INPUT type="button" value="Button" id=button1 name=button1
onClick=ctrNum3(this.form.text1.value,this.form.decimali.checked,
this.fo
rm.numDec.value)><br>
<INPUT type="text" name=text2>
</FORM>
----------------------