Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Validare la data di un form particolare

    Salve a tutti,

    Ho un form formato da un campo data ed un campo testo. Devo validare entrambi i campi nel seguente modo:
    Il campo data deve essere di tipo gg-mm-aaaa oppure nullo;
    Il campo testo non può essere nullo.

    Questo il codice che uso nell'evento onClick sul pulsante invia:

    function verifica(form){
    Filtro = /^[0-9]{2}\-[0-9]{2}\-[0-9]{4}$/;
    if (document.nomeform.data.value!=="") {
    if (!Filtro(document.nomeform.data.value)) { alert('Formato Data non valido');
    return false;
    }
    } else if (document.nomeform.testo.value=="") { alert("Inserisci il Testo");
    return false;
    }
    return true;
    }


    Purtoppo le righe che controllano la data non funzionano. Cioè mi controlla il formato data se è quello giusto, ma una volta inserita la data, mi fa postare anche se il testo non è presente...

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Forse il codice è un po' ampolloso, ma lo fatto per prendere pratica con gli oggetti. Vedi se può servire
    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>Pagina senza titolo</title>
    <script language="javascript" type="text/javascript">
    // <!CDATA[
    
    function Button1_onclick(v) 
    {
        var form = v.form;
        var ret = verifica();
        if(ret.isvalid) form.submit(); else alert(ret.message);
    }
    
    function verifica()
    {
        var ret = new Object();
        ret.message = "";
        ret.isvalid = true;
        
        
        var t1 = document.getElementById("Text1");
        var t2 = document.getElementById("Text2");
        
        var v1 = trim(t1.value);
        if( (v1 != "" && !isdate(v1).isdate) )
        {
            ret.isvalid = false;
            ret.message += "&La data deve essere nel formato gg-mm-aaaa";  
        }
        
        if(trim(t2.value) == "")
        {
            ret.isvalid = false;
            ret.message += "&Il campo Text2 non deve essere vuoto";   
        }
        ret.message = ret.message.substr(1);
        return ret;
    }
    
    /* funzioni di libreria-------------------------------------------------------*/
    /*---------------------------------------------------------------------
    Questa funzione accetta una variabile stringa e verifica se e una data.
    La data deve essere nel formato giorno mese anno. Il giorno e il mese
    devono essere di 1 o 2 cifre, l'anno deve essere di 2 o 4 cifre.
    Il delimitatore deve essere / o - o .
    Restituisce un oggetto con le proprieta:
    	.isdate = vero o falso
    	.error	= messaggio errore
    	.year	= anno
    	.month	= mese (1 - 12)
    	.day	= giorno (1 - 31)
    	.data   = oggetto data
    ---------------------------------------------------------------------*/
    function isdate(dateStr) 
    {   
    	var ret = new Object();
    	ret.isdate = false;
    	ret.error = "";
    	ret.year = 0;
    	ret.month = 0;
    	ret.day = 0;
    	ret.data = null;
    	
    	
        // inizio stringa
        // 1 o 2 cifre
        // / o - o .
        // 1 o 2 cifre
        // / o - o .
    	// 4 cifre
    	// fine stringa    
        //var datePat = /^(\d{1,2})(\/|-|.)(\d{1,2})(\/|-|.)(\d{4})$/;
        //var datePat = /^\s*(\d{1,2})(\/|-|\.)(\d{1,2})(\2)(\d{2}|\d{4})\s*$/;
        
        /* modificata per il formato gg-mm-aaaa */
        var datePat = /^\s*(\d{2})(-)(\d{2})(\2)(\d{4})\s*$/;
        
        //restituisce, allo stesso modo di una matrice, i risultati di una ricerca
        //di una stringa utilizzando un oggetto Regular Expression
        var matchArray = dateStr.match(datePat); 
    
        if (matchArray == null) {
            ret.error = "Per favore, introduci la data nei formati gg-mm-aaaa ";
            return ret;
        }
    
        day = matchArray[1];
        month = matchArray[3]; 
        year = matchArray[5];
        if(year.length == 2)
    		if(parseInt(year,10) < 30)
    			year = parseInt(year,10) + 2000;
    		else
    			year = parseInt(year,10) + 1900;
    
        if (month < 1 || month > 12) { // il mese deve essere compreso tra 1 e 12
            ret.error = "Il mese deve essere compreso tra 1 e 12.";
            return ret;
        }
    
        if (day < 1 || day > 31) {//il giorno non puo essere < 1 e > 31
            ret.error = "Il giorno deve essere compreso tra 1 e 31";
            return ret;
        }
    
        if ((month==4 || month==6 || month==9 || month==11) && day==31) {
            //i mesi aprile, giugno, settembre, novembre, hanno 30 giorni
            ret.error = "Il mese " + month + " non ha 31 giorni!";
            return ret;
        }
    
        if (month == 2) { // verifica se l'anno e bisestile: febbraio puo avere 29 giorni
            var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
            if (day > 29 || (day==29 && !isleap)) {
    			ret.error = "Febbraio " + year + " non ha " + day + " giorni!";
    			return ret;
            }
        }
        isDateError = "";
        // se sono qui, la data e valida!
    	ret.isdate = true;
    	ret.error = "";
    	ret.year = year;
    	ret.month = month;
    	ret.day = day;
    	ret.data = new Date(year, (month - 1), day);
        
        return ret;
    }
    
    //-------------------------------------------------------------------
    // rimuove gli spazi iniziali e finali da strValore
    //-------------------------------------------------------------------
    function trim(stringa)
    { 
    	stringa = stringa + "";
    	return stringa.replace(/^ */,"").replace(/ *$/,""); 
    } 
    
    // ]]>
    </script>
    </head>
    <body>
        <form id="form1" action="a.htm">
            <table>
                <tr>
                    <td><label>Data nel formato gg-mm-aaaa oppure nullo: </label></td>
                    <td><input id="Text1" type="text" /></td>
                </tr>
                <tr>
                    <td><label>Testo non può essere nullo: </label></td>
                    <td><input id="Text2" type="text" /></td>
                </tr>
            </table>
            <input id="Button1" type="button" value="Submit" onclick="return Button1_onclick(this)" />
        </form>
    </body>
    </html>
    Pietro

  3. #3
    Grazie Pietro sei stato davvero gentile, purtroppo il tuo codice è molto complesso e basta cambiare il tipo di pulsante o aggiungere altri campi, che per me diventa pesante personalizzarlo....

    Se puoi, gentilmente, dovresti partire dalla mia funzione e farla funzionare in quella maniera semplice che a me basta...

    Grazie

  4. #4
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    C'e' un else di troppo... e manca il test:
    codice:
    <script>
    function verifica(form){
    	Filtro = /^[0-9]{2}\-[0-9]{2}\-[0-9]{4}$/
    	if (document.nomeform.data.value!=="") {
    		if (!Filtro.test(document.nomeform.data.value)) { 
    			alert('Formato Data non valido');
    			return false;
    		}
    	} // else
    	if (document.nomeform.testo.value=="") { 
    		alert("Inserisci il Testo"); 
    		return false;
    	}
    	return true;
    }
    </script>
    Ho indentato il codice per una migliore comprensione...

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  5. #5
    GRAZIE......

    Adesso va alla grande!!!!

    Cmq il tuo codice precedente è molto sofisticato ed è proprio quello che dovrei montare.... ma purtroppo non sono esperto di Javascript

    Me la cavo abbastanza bene con PHP ma a volte mi capita di dover mischiare del codice PHP all'interno del codice Javascript... e questa è la cosa che molto spesso mi fa incaponire la pelle VVoVe:


  6. #6
    ...ops

    grazie ovviamente a pietro09 ed al moderatore br1


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.