Newsgroup: it.comp.lang.javascript
Titolo: controllo data

c'è un modo per sapere se la data è corretta? (tipo isdate di asp)
grazie

Dipende dal modo in cui devi formattare la data!!!
Tu in che modo devi formattarla????
gg-mm-yyyy ???
yyyy-mm-gg ???
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

http://www.regexlib.com/
regular expression a tutto andare! compreso il controllo di data


 regular expression a tutto andare! compreso il controllo di data
Interessante, ma almeno in Javascript un controllo di data e' preferibile
farlo - almeno per quanto mi riguarda - con l'oggetto date, piuttosto che
usare una regexp chilometrica. :)
Al limite la regexp si puo' utilizzare come primo step per verificare se la
stringa e' wellformed (ovvero nn/nn/nnnn, dove n e' un valore numerico).
--------------------------------
Inviato via 
http://usenet.libero.it

sě ma io scrivo in italiano la data e in javascript devo passarla in inglese!
e devo sbattermi il doppio!
questa sembra andare.
 :-))


 :-))
"Affatto." come direbbe un certo Scarta.. ;)
Perche' se usi un controllo esatto, anche con le regexp, devi cmq verificare
la validita' dei dati inseriti (hai il mese in seconda posizione, invece che
nella prima, e non puo' superare un certo valore), ergo la regexp cambiera'
in base al tipo di formato che tu vuoi controllare (ovvero il discorso non
cambia, sia che tu usi la regexp per questo tipo di controllo che non.. ),
mentre se ti limiti a controllare il formato 99/99/9999 hai una data
"wellformed" ma non sei certo di averla valida.
La cosa migliore da fare e' : Controlli se la data e' well-formed (con
regexp, o altro codice e' indifferente), a quel punto utilizzi il classico
metodo di checked che si usa fare in JS (ovvero splittare la stringa e
ricomporla secondo il formato che a noi interessa passandola a Date() ) e
controllare se e' uguale alla data inserita dall'utente.
Senza contare che, in questo modo, avendo un oggetto data, possiamo farci
interessanti operazioni sopra.


> "Affatto." come direbbe un certo Scarta.. ;)
Lo dico cosi' spesso?

 Lo dico cosi' spesso?
No in realta'.. Ci ho fatto semplicemente caso quando l'hai usato perche'
m'e' parso di averlo usato anche a me un paio di volte, sempre in
discussioni inerenti all'NG.. :)


 > sì ma io scrivo in italiano la data e in javascript devo passarla in


 te la posto, così vedi con i tuoi occhi.
[...]
Carina, ma andrebbe riscritta.
Non mi sembra il caso di escludere ns4.x, i vari Opera e qualche ie solo per
una data.
Non l'ho "scomposta" nelle sue parti, ma si dovrebbe poter adattare: la non
compatibilita' sembra essere, ma sempre a colpo d'occhio, solo l'utilizzo di
"?:".
Riconsidera il consiglio di Zer0, per ora.

 ciao
alert(ControllaData("12/12/12"))
oppure
alert(ControllaData("12/12/1999"))
IE5 mi da errore:
"quantificatore imprevisto" alla riga (var re = /^(?:(?:31 ... ...)
Opera5 mi ritorna (false)
Netscape4.61 mi ritorna (false)
Netscape6, Mozilla, Phoenix, K-meleon
mi ritornano (true)
Non mi sembra granche', lascia fuori troppi browser,
IE 5 addirittura, non mi sembra il caso.
--
Ciao
  [web]   
www.gfcarlotti.it
   [mail]   
fra...@gfcarlotti.it
    [pgp]  
www.gfcarlotti.it/pgp/franco.asc

per risolvere il problma con IE5 basta utilizzare la costruzione esplicita.
 var re = new
RegExp("^(?:(?:31(\\/|-|\\.)(?:0?[13578]|1[02]))\\1|(?:(?:29|30)(\\/|-|\\.)(?:0?[1,3-9]|1[0-2])\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$|^(?:29(\\/|-|\\.)0?2\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\d|2[0-8])(\\/|-|\\.)(?:(?:0?[1-9])|(?:1[0-2]))\\4(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$");
 return re.test(Data);
semplicemente alla dichiarazione  precedente (qualche post sopra) bisogna
raddoppiare tutti i "\" come ora riportato e tutto funziona.


 per risolvere il problma con IE5 basta utilizzare la costruzione
esplicita.
Premetto che di RegExp ne capisco poco, purtroppo per me,
ma, se quanto ho scritto sotto e' esatto, non e' cambiato nulla,
i risultati sono sempre quelli postati Venerdi'.
function ControllaData(Data){
        var re = new
RegExp("^(?:(?:31(\\/|-|\\.)(?:0?[13578]|1[02]))\\1|(?:(?:29|30)(\\/|-|\\.)(
?:0?[1,3-9]|1[0-2])\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$|^(?:29(\\/|-|\\.)0?2
\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[246
8][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\d|2[0-8])(\\/|-|\\.)(?:(?:0?[1-9])
|(?:1[0-2]))\\4(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$");
        return re.test(Data);
}
alert(ControllaData("12/12/12"))


  return re.test(Data);
No il problema e' proprio "?:".
Era sicuramente presente in Jscript 5.6, non ricordo nel 5.5.
IE5.0 e IE5.5, con installazioni predefinite intendo perche' l'engine js e'
installabile a parte, possiedono versioni diverse di Jscript.
Rimane il problema per gli altri browser.
Insisto sul riscriverla o seguire il consiglio di Zer0.