Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407

    Validazione orario formato hh:mm

    Ciao.

    Ho un problema con questa regular expression che dovrebbe controllare l'esatta sintassi di un orario inserito nel formato hh:mm.

    codice:
     var re = new RegExp("^([0-9]{2}) : ([0-9]{2})$", "");
    Ma i test validano anche orari che non sono orari, cioè ad exempio: 25:63

    Cosa sbaglio?
    Grazie

  2. #2
    beh, perché le regexpr che hai scritto dice:

    "Dall'inizio della stringa, cerca un sottoinsieme di 2 caratteri e controlla che siano numeri, poi, dopo un ":", cerca un altro sottoinsieme di due caratteri e controlla che siano numeri, assicurati poi che la stringa finisca alla fine del secondo sottoinsieme."

    Proprio per questo valida tutti i numeri a 2 cifre.

    L'unico modo sicuro per farlo è utilizzare prima la regexpr che stai usando e, se supera il test, fai:

    codice:
       //metti di avere in str il value inserito dall'utente
       //ha già superato la tua regexpr
       var splitted = str.split(":");
       var hour = parseInt(splitted[0]);
       var minute = parseInt(splitted[1]);
       return (!isNan(hour) && !isNan(minute) && hour < 24 && hour >= 0 && minute < 60 && minute >= 0);
    Dovrebbe andare
    I DON'T Double Click!

  3. #3
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    grazie x il suggerimento e x la spiegazione ma non saprei come modificare il codice esistente, puoi aiutarmi ? :

    codice:
    function validate(theform)
    
    {
    	var i=0,Q= theform.elements,L=Q.length;
    	
    	for (var a = 0; a < L; a++){
    	
    		var campo = Q[a];
    		if( campo.value===''){
    			campo.style.backgroundColor='orange';
    			++i;
    		}
    		else campo.style.backgroundColor='';
    	}
    	
    	if(i){
    	
    		alert('I campi segnalati sono obbligatorio in questo form.');
    		return false;
    	}
    
       
    var re = new RegExp("^([0-9]{2}) : ([0-9]{2})$", "");
    
    if (!theform.ORA.value.match(re))
        {
          alert("L\'\orario va inserito nel formato hh:mm !");
          theform.ORA.focus();
          theform.ORA.select();
          return(false);
        } 
    
         	
    	return(true);
      
    }

  4. #4
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    basta una sola ed unica espressione regolare

    http://forum.html.it/forum/showthrea...78#post9751278
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  5. #5
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    Originariamente inviato da fcaldera
    basta una sola ed unica espressione regolare

    http://forum.html.it/forum/showthrea...78#post9751278
    Bravissimo !!!
    grazie

  6. #6
    Utente di HTML.it L'avatar di echoweb
    Registrato dal
    Sep 2008
    Messaggi
    419
    Originariamente inviato da fcaldera
    basta una sola ed unica espressione regolare

    http://forum.html.it/forum/showthrea...78#post9751278
    Ciao,

    come verrebbe il codice modificato per un controllo sulla data?

    esempio: 23/12/2009

    il giorno accetta da 00 a 31
    il mese accetta da 01 a 12
    l'anno accetta da 1990 a 2034

    codice:
    <script>
    
    function check_data(id)
    {
      var re_time = /^(0[0-9]|1[0-9]|2[0-9]|3[0-1]):(0[0-2]|1[0-9]|2[0-9]|3[0-1]):0[1-9]/;
      var ora = document.getElementById(id).value;
    
      if (ora.match(re_time)) {
         alert(ora + " è una data valida");
      }
      else {
         alert("che razza di data sarebbe?")
      }
    }
    
    </script>
    
    
    <input name='dataa' type='text' id='dataa' onblur=check_data(this.id) value='24:01:07' />
    Questo codice ripreso da quello che avevi postato tu in precedenza va bene per giorno ee mese, ma non per anno....


    "Non soffocare la tua ispirazione e la tua immaginazione,
    non diventare lo schiavo del tuo modello"

    Vincent van Gogh

  7. #7
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    ma vuoi al contempo evitare date impossibili?
    guarda qui
    ciao

  8. #8
    prova con:


    var re_time = /^([1-9]|0[1-9]|[1-2][0-9]||3[0-1])\/([1-9]|0[1-9]|1[0-2])\/(199[0-9]|20[0-2][0-9]|203[0-4])/;
    I DON'T Double Click!

  9. #9
    Utente di HTML.it L'avatar di echoweb
    Registrato dal
    Sep 2008
    Messaggi
    419
    Perfetto era quello che cercavo!!!

    Grazie a tutti e due


    "Non soffocare la tua ispirazione e la tua immaginazione,
    non diventare lo schiavo del tuo modello"

    Vincent van Gogh

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.