Newsgroup: it.comp.lang.javascript
Titolo: Funzione che mi dice se è un numero

Devo prendere un numero in input compreso tra 1 e 10 , se l'utente immette
una stringa sfugge al controllo ; come posso controllare che il dato immesso
oltre ad appartenere a quel range di valori sia anche un numero ?
Attuale controllo :
if ( (form.giorno.value < 1) || (form.giorno.value > 31) )
    {
    alert("Devi inserire nel campo giorno un valore compreso tra 1 e 31 ") ;
    form.giorno.focus() ;
    }
--
Ciao
Flex

 if ( gg < 1 || gg > 31 || isNaN(gg)) {
Mhm. D'accordo che JS non e' tipizzato, ma non sarebbe piu' corretto 
fare un casting? Non tanto per la funzionalita' del codice in se', 
quanto per la correttezza sintattica e "formativa". Altrimenti poi ci 
ritroviamo il solito utente che, leggendo questo codice, pensa che gg 
sia un "Numero" invece che una Stringa :)
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

     }
Ha gia' risposto il buon Catarsi, quindi non mi dilungo oltre. Un unico 
appunto: Tutto questo, e' per un inserimento data? Perche' in quel caso, 
come logica di controllo non va bene (Febbraio ha 28 gg, per dirci).


 TIA
Gu?


 ha scritto nel messaggio
news:MPG.1808d08c8...@news.virgilio.it...

Effettivamente lo sapevo già  ,appena ho un poco di tempo realizzo una
funzione ad hoc che fà dipendere il valore del  giorno da quello del mese,
anche se mi secca da morire :-))
--
Ciao
Flex

 ricambio con un TIA. Ok? ;-P
okay, mi fa fatica andare a cercare in giro. ^___^


 anche se mi secca da morire :-))
Scusa, ma a questo punto non fai semplicemente prima a controllare la 
validita' dell'intera data? :)


 ha scritto nel messaggio
news:MPG.1809256ef...@news.virgilio.it...

Il punto è che non si deve immettere l'anno , ma soltanto giorno e mese ,
altrimenti dovrei costruire una data false inserendo un anno a caso
,controllarla e se tutto va bene salvare il dato corretto nel db
--
Ciao
Flex

 ,controllarla e se tutto va bene salvare il dato corretto nel db
Mhm, capisco. Ma allora mi manca il riferimento sul "come" una cosa del 
genere puo' esserti utile. Del resto una data dipende anche dall'anno 
(gli anni bisestili, Febbraio di 29 invece che di 28 giorni..).


 however improbable, must be the truth." (S.H.)
fai un salto su 
www.programmareweb.com/ricorrenze/
 e tutto ti sarą + chiaro.
--
Ciao
Flex

 fai un salto su 
www.programmareweb.com/ricorrenze/
 e tutto ti sarà +
chiaro.
Eh.. bastava dirlo. :) Cmq sono ancora convinto che il check sulla data
completa sia la cosa migliore. In primis, perche' fai un unico controllo
globale.. Seconda di poi, perche' essendo una ricorrenza, ci sara' una data
(comprensiva di anno) da cui sara' partita, no? In questo modo puoi anche
sapere quanti anni sono passati da tale ricorrenza.
--------------------------------
Inviato via 
http://usenet.libero.it

Ecco lo script completo & funzionante :
function chk_onsubmit()
{
 var form = document.form1 ;
 var returnValue = false ;
    if ( (form.giorno.value < 1) || (form.giorno.value > 31) ||
isNaN(form.giorno.value) )
    {
    alert("Devi inserire nel campo giorno un valore compreso tra 1 e 31 ") ;
    form.giorno.focus() ;
    }
 else if ( (form.mese.value < 1) || (form.mese.value > 12) ||
isNaN(form.mese.value))
    {
    alert("Devi inserire nel campo mese un valore compreso tra 1 e 12 ") ;
    form.mese.focus() ;
    }
 else if ( (form.mese.value == 2) && (form.giorno.value > 28) )
    {
    alert("Febraio ha solo 28 giorni ! ! !") ;
    form.giorno.focus() ;
    }
 else if ( (form.mese.value == 4) || (form.mese.value == 6) ||
(form.mese.value == 9) || (form.mese.value == 11) && (form.giorno.value >
30) )
    {
    alert("Questo mese ha soltanto 30 giorni ! ! !") ;
    form.giorno.focus() ;
    }
 else if ( form.ricorrenza.value == 0 )
    {
    alert("Devi indicare il tipo ricorrenza") ;
     form.ricorrenza.focus() ;
     }
 else
 {
 returnValue = true  ;
 }
return returnValue ;
}
--
Ciao
Flex

 Ecco lo script completo & funzionante :
[...]
Ti ripropongo il consiglio del buon Zer0.
Il modo migliore per validare una data rimane quello di costruire un oggetto
data con cio' che l'utente ha inserito.
Veramente in breve, costruisci una data con i valori del form: new
Date(valoreAnno,valoreMese-1,valoreGiorno)
- se l'anno manca lo aggiungi
- il mese-1 perche' gennaio==0
- nell'ordine aaaa/mm/gg per scavalcare strane abitudini anglosassoni
Ottenuta la data la formatti come stringa e la confronti (come stringa) con
quella che ha immesso l'utente.

 Ecco lo script completo & funzionante :
IMVHO, non ha senso.
Ti ribadisco il mio suggerimento di usare una data *effettiva* per fare
questo tipo di controlli.
Innanzitutto, il controllo si riduce *veramente* all'osso e non devi fare
questo garbuglio di IF.
Come ti ho detto, se l'hanno fosse bisestile?
Inoltre inserendo anche l'anno (non capisco perche' tu non voglia farlo, una
rincorrenza e' data pur sempre da una *Data*) puoi ottenere anche quanto
tempo e' passato (anni, mesi, giorni.. anche ore/minuti/secondi volendo,
tanto da fare un countdown).


 - nell'ordine aaaa/mm/gg per scavalcare strane abitudini anglosassoni
Piu' che altro perche' questo e' lo standard internazionale (ed e' l'unico
costrutture per la data valido con separatori.. ) :)


Il controllo della data prima o poi se programmi ti necessitera' ed e' una
cosa
che cmq trovi su tutti i manuali e quindi non devi inventarti nulla. ;-)
Se pero' adesso non hai tempo o voglia di sbatterti ti consiglio di usare
nel form
liste di selezione tipo:
<select>
<option>1
<option>2
......
</select>
una per i giorni ed una per i mesi.
Se l'utente selezionera' una data errata tipo 31 novembre, semplicemente
non corrispondera' a nessuna ricorrenza. Stop.
Regards,
 Mattex


 che cmq trovi su tutti i manuali e quindi non devi inventarti nulla. ;-)
Sono curioso: Che controlli si trovano nei manuali, per il check della data
in JS? :)


 costrutture per la data valido con separatori.. ) :)
Non lo ammettero' mai. E' gente che misura in "piedi", "once" e "libbre",
guida dalla parte sbagliata, mangia pudding e non ha il bidet.

 guida dalla parte sbagliata, mangia pudding e non ha il bidet.
Ehy, mica stavo dando ragione agli anglossassoni... Stavo semplicemente
costatando che il metodo anno/mese/giorno e' quello standard
indipendentemente dai settaggi locali :) (se ti ricordi, ti feci fare anche
un test su Access in proposito.. )


 pudding e non ha il bidet.
Lo standard internazionale è il più logico. Però non mi risulta che questa
sia un'abitudine anglosassone. Se non sbaglio, in America e in Inghilterra
usano mm/gg/aaaa, tanto per confermare che sono gente strana.
Maurizio.


Umanita' costretta a creare standard internazionale perche' abitudine
anglosassone (ergo Regno Unito e per estensione vari derivati, tipo USA)
usare mm/gg/aaaa e altre cose strane.
Ma non potro' neanche dover mettere [FRINGUELLO] nell'oggetto di un post se
ho voglia di scherzare...

 ha scritto nel messaggio
news:213Z45Z18Z187Y1...@usenet.libero.it...

Veramente io ho risolto con lo script che ho allegato qualche giorno fà , e
tutto funziona alla perfezione ! ! !
--
Ciao
Flex


Dici che siamo i primi a controllare una data?
Anche se trovi un controllo simile in C , in VB o altro,
non credo sia molto difficile riscriverselo x JavaScript !
Cmq l'unico vero problema sulla data penso riguardi Febbraio e gli anni
bisestili.
Controllando un 29 Febbraio in VB ad es. :
If ((anno Mod 4) <> 0 )Then
  MsgBox "Data errata !", vbOKOnly, "Attenzione!"
End If
If (((anno Mod 100) = 0) And ((anno Mod 400) <> 0)) Then
  MsgBox "Data errata !", vbOKOnly, "Attenzione!"
End if
(Non sara' scritto perfettamente ma il senso dovrebbe essere quello).
(Con "(anno Mod 4 )" si ottiene il resto della divisione
"valore dell'anno diviso 4").
Regards,
 Mattex


 bisestili.
Su JS questo tipo di problemi non ci sono, in realta'.. Proprio perche' la
gestione della data e' concettualmente differente da VB.
E' tutto piu'.. generalizzato.
Qualcuno ha dei manuali su JS che illustrano un check sulla data?


 End if
Ad esempio, VB non ha la funzione IsDate() ?
Perche' scrivere tutte queste condizioni (piu' magari i controlli sui 30 o
31 giorni) quando risolvi tutto in un'istruzione?
Javascript e Jscript non hanno questa funzione, ma e' ugualmente assurdo
procedere in quel modo.

 Qualcuno ha dei manuali su JS che illustrano un check sulla data?
cercando algoritmi da confrontare a quello che uso x accertare che i valori
editati siano numerici, visto l'oggetto
"Re: Funzione che mi dice se è un numero" sono rimasto coinvolto su Date()
xche' e' cmq un argomento
interessante e tra i primari visto che, ad es., un OS puo' in un certo senso
essere visto come un calendario.
...gli autori tutti tosti...Ok leggiamoci sta sfilza di post che qualcosa
imparo! :)
alla fine : Flex scrive ancora in un modo proprio come ha postato
l'oggetto...
probabilmente servirebbe un codice + esteso. (pappa fatta??)
.....pero' vorresti vedere del codice eh?
se ce l'avessi non esiterei a postarlo, non ce l'ho e x rendermi utile ho
cercato di dare un'indicazione x
correggere l'errore, che poi quella (in questo specifico caso di data) di
non controllarla proprio, a livello di efficenza non e' male... :)



ma alla fine dopo una 60ina di post il gioco si e' fatto postare meno codice
possibile? :-|
(la data non e' cmq una mia esigenza specifica: vedi il nome del reale
oggetto dei post!)
o me li devo rileggere tutti e 60 xche' mi sono perso la perla fra
precedenti chiacchere inutili?
Regards,
 Mattex.


 .....pero' vorresti vedere del codice eh?
Eh? Continuo a non capire.. ^_^"


 indifferente).
Esatto. Il "vero programmatore non ha bisogno di commentare il codice. Il
codice e' gia' autoesplicante di suo".. 8)


 precedenti chiacchere inutili?
A Flex ho gia' risposto (ripeto 8/10 e nessuna perla), qui rispondevo a te.