Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 31
  1. #1

    [Javascript] Validare una data

    Ciao a tutti... ho trovato in giro questo codice che mi valida una data sia nel formato inglese che in quello italiano:
    codice:
    function verifyDateFormat(DateString, DateFormat) {
    var match
    var tmpDate
    var validFormat = false
    
    try {
    	match = DateString.match(/^(\d?\d)\D(\d?\d)\D(\d{4}|\d{2})$/)
    
    	if (match != null) {
    		if (DateFormat == "en") {
    			tmpDate = new Date(match[3], match[1] - 1, match[2])
    			validFormat = ((tmpDate.getMonth()==match[1]-1) && (tmpDate.getDate()==match[2]))
    		} else if (DateFormat == "it"){
    			tmpDate = new Date(match[3], match[2] - 1, match[1])
    			validFormat = ((tmpDate.getMonth()==match[2]-1) && (tmpDate.getDate()==match[1]))
    		}
    	}
    }
    catch (e) {
    	alert(e.message)
    }
    finally {
    	return validFormat
    }
    }
    Ora io vorrei avere la possibilità di validare una data anche in formato (yyyy/mm/gg) mi sapete aiutare?

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    la RegExp potrebbe essere questa:
    /^\d{4}\D\(0[1-9])|(1[0-2])\D([0-2][0-9])|(3[01])$/

    Al posto dei due \D io metterei [\/\.\:\-]

    Nota che in questa RegExp lo 0 iniziale nei giorni e mesi e` obbligatorio
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  4. #4
    scusa... io ne capisco ancora poco di regexp, quindi se non ti è di troppo disturbo mi dovresti aiutare un pochino in più...
    Il codice scritto dopo, poi come cambia? Io ho un if che mi controlla quella scritta in inglese, poi un else if che mi controlla quella in italiano, immagino che poi ci sarà un else per l'altra... ma che ci metto in quel ramo?

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Avevo capito che volevi modificare completamente la data, per cui ti ho dato la RegExp per la data nel formato aaaa/mm/gg.

    Ma la variabile DateFormat che valori puo` avere?
    Nello script utilizzi "it" e "en", ma ora ne introduci un altro.

    E poi vuoi un riconoscimento automatico della data?
    Con il formato aaaa/mm/gg e` possibile (cosa che invece non si puo` fare tra gg/mm/aa[aa] e mm/gg/aa[aa]

    PS: il formato inglese della data e` gg/mm/aaaa, quello mm/gg/aaaa e` americano.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  6. #6
    Ti spiego meglio... alla funzione di prima non sono affezzionato, quindi se hai soluzioni migliori a me va bene.
    Io vorrei avere una funzione dove in entrata metto una data ed il formato (IT,EN o generico) e lui mi dica in uscita se la data è valida.
    Le date devono avere solo questi tre formati:
    IT -> gg/mm/yyyy
    EN -> mm/gg/yyyy
    GEN -> yyyy/mm/yy
    Sempre con 2 cifre per il giorno ed il mese.
    La funzione che ho postato accetta già il formato EN e IT, io vorrei controllare anche l'altro formato.
    Spero di essere stato più chiaro.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Ora ho capito, ma ti faccio notare che il tuo script accetta anche date del tipo:
    g/m/aa
    m/g/aa
    gg:mm:aaaa
    ggXmmXaa
    ecc.
    Inoltre i valori di DateFormat possono essere "it" e "en" non "IT" e "EN" come da te prospettato.

    Ecco una prima bozza:
    codice:
    function verifyDateFormat(DateString, DateFormat) {
      var match;
      var tmpDate;
      var gg='',mm='',aa='';
    
      var RE = new Array();
      RE['it'] = /^([0-3]\d)[\/\.]([01]\d)[\/\.](\d{4})$/
      RE['en'] = /^([01]\d)[\/\.]([0-3]\d)[\/\.](\d{4})$/
      RE['gen'] = /^(\d{4})[\/\.]([01]\d)[\/\.]([0-3]\d)$/
    
      if(!match=DateString.match(RE[DateFormat]) {
        return false;
    
      switch(DateFormat) {
        case "it":
          gg = match[0];
          mm = parseInt(match[1])-1;
          aa = match[2];
          break;
        case "en":
          mm = parseInt(match[0])-1;
          gg = match[1];
          aa = match[2];
          break;
        case "gen":
          aa = match[0];
          mm = parseInt(match[1])-1;
          gg = match[2];
          break;
      }
      tmpDate = new Date(aa, mm, gg);
      return (tmpDate.getMonth()+1==mm) && (tmpDate.getDate()==gg) && tmpDate.getFullYear()==aa;
    }
    Nota che ho cambiato la struttura dello script, ma ho tenuto il significato delle variabili e i parametri di ingresso e uscita.
    Ho messo un controllo anche sull'anno (che nella tua funzine non c'era), mentre ho eliminato il controllo su "e" che credo sia sintassi proprietaria.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  8. #8
    mi da svariati errori di sintassi... sto cercando di correggerne alcuni, ma ad esempio non capisco se lo switch è nell'else o nel if e se l'if va chiuso o no prima dello switch...

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Hai ragione. Avevo iniziato in un modo poi ho modificato.

    L'if con il match deve solo fare il return false se il match non e` verificato. Forse e` meglio metterci una parentesi in piu`:
    if(!(match=DateString.match(RE[DateFormat])) return false;
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  10. #10
    l'ho corretto così perchè quell'if non gli piaceva... ed ho provato, ma mi da false quando invece la data esiste.
    codice:
    function verifyDateFormat(DateString, DateFormat) {
      var match;
      var tmpDate;
      var gg='',mm='',aa='';
    
      var RE = new Array();
      RE['it'] = /^([0-3]\d)[\/\.]([01]\d)[\/\.](\d{4})$/
      RE['en'] = /^([01]\d)[\/\.]([0-3]\d)[\/\.](\d{4})$/
      RE['gen'] = /^(\d{4})[\/\.]([01]\d)[\/\.]([0-3]\d)$/
    
      if(match!=DateString.match(RE[DateFormat])) {
        return false;
      }
      switch(DateFormat) {
        case "it":
          gg = match[0];
          mm = parseInt(match[1])-1;
          aa = match[2];
          break;
        case "en":
          mm = parseInt(match[0])-1;
          gg = match[1];
          aa = match[2];
          break;
        case "gen":
          aa = match[0];
          mm = parseInt(match[1])-1;
          gg = match[2];
          break;
      }
      tmpDate = new Date(aa, mm, gg);
      return (tmpDate.getMonth()+1==mm) && (tmpDate.getDate()==gg) && tmpDate.getFullYear()==aa;
    }
    
    var a="31/12/2004";
    alert(verifyDateFormat(a, "it") );

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.