Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126

    [c#]sintassi if ed espressione regolare..

    ciao, devo controlla un campo dove il suo contenuto deve rientrare in un certo pettern.. ad es. devo controllare un codice fiscale e faccio in questo modo:
    codice:
    Regex expcodfisc = new Regex("^[A-Za-z]{6}[0-9]{2}[A-Za-z]{1}[0-9]{2}[A-Za-z]{1}[0-9]{3}[A-Za-z]{1}$");	
    if(expcodfisc.Match(tcdf.Text).Success==false)
    {
    	if(tcdf.Text=="")
    	{
    	return true;
    	}
    MessageBox.Show("Il CODICE FISCALE non è formalmente corretto.\n Un codice fiscale corretto deve rispettare la forma di: 16 caratteri alfanumerici ordinati.","Errori riscontrati",MessageBoxButtons.OK,MessageBoxIcon.Warning);
    
    return false;
    }
    Il mio problema non è l'espressione regolare, ma l'if. Infatti devo dare la possibilità che questo campo possa essere lasciato vuoto, quindi controllo innanzitutto se il contenuto del campo cdf soddisfa l'espressione regolare, ma all'interno di questo controllo, controllo (scusate il gioco di parole) anche se il campo è vuoto, e se è vuoto passo al controllo successivo dando per buono questo (return true).. Purtroppo non ottengo il risultato sperato.. quando clicco sul pulsante dove faccio questi controlli, non ottengo nessun messaggio ma nemmeno l'azione desiderata (inserimento nel database)..
    devo in pratica per forza compilare anche il campo del codice fiscale
    Siccome faccio + di un controllo vi invio l'intero codice, magari qualcuno di voi intercetta un errore in altre righe che mi porta questi problemi.. :
    codice:
    		//VALIDAZIONE CAMPI
    	private bool validationField()
    	{
    			//controllo dei campi obbligatori
    			if(tnome.Text==""||tcognome.Text==""||taa.Text==""||tcittares.Text==""||tveicolo.Text==""||tcolore.Text==""||tmarca.Text==""||tmodello.Text==""||tcilind.Text==""||ttelaio.Text=="")
    			{
    		MessageBox.Show("Alcuni campi sono OBBLIGATORI e non possono essere lasciati vuoti. I campi Obbligatori sono:\nNome - Cognome - Anno di nascita - Città di residenza - Tipo veicolo - Colore - Marca - Modello - Cilindrata - Codice telaio","Errori riscontrati",MessageBoxButtons.OK,MessageBoxIcon.Warning);
    				// errorProvider1.SetError(label1,"Alcuni campi di testo sono stati lasciati vuoti");
    				
    				return false;
    			}
    			//controllo dei campi testuali
    		Regex exptestuale = new Regex("^[A-Z'ÓÒÁÀÈÉÙÚ]+$");	
    		if(exptestuale.Match(tnome.Text).Success==false || exptestuale.Match(tcolore.Text).Success==false)
    			{//|| exptestuale.Match(tcognome.Text).Success==false
    			MessageBox.Show("Alcuni campi devono contenere solo caratteri ALFABETICI, Nessun numero!\nSono Accettati inoltre i caratteri speciali quali: { ' - à - ò - è - ù }\nI campi di tipo Testuale sono:\nNome - Cognome - Colore","Errori riscontrati",MessageBoxButtons.OK,MessageBoxIcon.Warning);
    				return false;
    			}
    			//controllo dei campi numerici
    		Regex expnumerica = new Regex("^[0-9]+$");	
    		if(expnumerica.Match(tcilind.Text).Success==false || expnumerica.Match(ttel.Text).Success==false || expnumerica.Match(tfax.Text).Success==false)
    		{
    			if(ttel.Text=="" || tfax.Text=="")
    			{
    			return true;
    			}
    			MessageBox.Show("Alcuni campi devono contenere solo caratteri NUMERICI, Nessun testo!\nI campo di tipo Numerico sono:\nCilindrata - Telefono - Fax","Errori riscontrati",MessageBoxButtons.OK,MessageBoxIcon.Warning);
    			return false;
    		}
    	
    		//controllo del campo partita iva
    		Regex expiva = new Regex("^\\d{11}$");	
    		if(expiva.Match(tpiva.Text).Success==false)
    		{
    			
    			if(tpiva.Text=="")
    			{
    				return true;
    			}
    			MessageBox.Show("Il campo PARTITA IVA deve contenere solo 11 NUMERI.","Errori riscontrati",MessageBoxButtons.OK,MessageBoxIcon.Warning);
    			return false;
    		}
    		
    		//controllo del campo codice fiscale
    		Regex expcodfisc = new Regex("^[A-Za-z]{6}[0-9]{2}[A-Za-z]{1}[0-9]{2}[A-Za-z]{1}[0-9]{3}[A-Za-z]{1}$");	
    		if(expcodfisc.Match(tcdf.Text).Success==false)
    		{
    			if(tcdf.Text=="")
    			{
    				return true;
    			}
    			MessageBox.Show("Il CODICE FISCALE non è formalmente corretto.\n Un codice fiscale corretto deve rispettare la forma di: 16 caratteri alfanumerici ordinati.","Errori riscontrati",MessageBoxButtons.OK,MessageBoxIcon.Warning);
    			return false;
    		}
    
    
    
    		if(lblId.Text!="")
    		{
    			//INSERIMENTO SOLO DEL CICLOMOTORE
    			string Id=lblId.Text;
    			string	connstring = "Database=maximotogest;Data Source=localhost;User Id=root;Password=";
    			string queryCiclomotore = "INSERT INTO ciclomotori(Cliente,Tipo_veicolo,Colore,Marca,Modello,Cilindrata,Cod_telaio,Targa,Note_ciclomotore) VALUES("+Id+",'"+tveicolo.Text.Replace("'","''")+"','"+tcolore.Text.Replace("'","''")+"','"+tmarca.Text.Replace("'","''")+"','"+tmodello.Text.Replace("'","''")+"',"+tcilind.Text+",'"+ttelaio.Text+"','"+ttarga.Text+"','"+tnote.Text.Replace("'","''")+"')";
    			MySqlConnection myconn = new MySqlConnection(connstring);
    			MySqlCommand cmdciclomotore = new MySqlCommand(queryCiclomotore);
    				
    			cmdciclomotore.Connection = myconn;
    			myconn.Open();
    				
    			cmdciclomotore.ExecuteNonQuery();
    			cmdciclomotore.Connection.Close();
    			MessageBox.Show("INSERIMENTO NUOVO CICLOMOTORE ASSOCIATO AD UTENTE PREESISTENTE RIUSCITO!.","Inserimento riuscito",MessageBoxButtons.OK,MessageBoxIcon.Information);
    		
    				}	
    					else
    		
    				{
    			//INSERIMENTO NUOVO CLIENTE E CICLOMOTORE
    			string giorno =(string) tgg.SelectedItem;
    			string mese = (string)tmm.SelectedItem;
    			string anno = taa.Text;
    			string datanascita = giorno +"/"+mese+"/"+anno; 
    		
    			string	connstring = "Database=maximotogest;Data Source=localhost;User Id=root;Password=";
    				
    			string queryCliente="INSERT INTO clienti(Nome,Cognome,Birth_date,Luogo_nascita,Res_city,Address,Cod_fisc,Partita_iva,Num_tel,Num_fax,Note_cliente) VALUES('"+tnome.Text.Replace("'","''")+"' ,'"+ tcognome.Text.Replace("'","''") +"','"+ datanascita + "','"+tluogonascita.Text.Replace("'","''")+"','"+tcittares.Text.Replace("'","''")+"','"+tvia.Text.Replace("'","''")+"','"+tcdf.Text+"','"+tpiva.Text+"','"+ttel.Text+"','"+tfax.Text+"','"+tnoteclient.Text.Replace("'","''")+"')";
    				
    			//inserisco il record per il cliente
    			MySqlConnection conn = new MySqlConnection(connstring);
    			MySqlCommand cmdcliente = new MySqlCommand(queryCliente);
    			conn.Open();
    			cmdcliente.Connection = conn;
    			cmdcliente.ExecuteNonQuery();
    			cmdcliente.Connection.Close();
    				
    			//recupero l'ultimo record inserito e inserisco il ciclomotore con l'id recuperato
    			//LAST_INSERT_ID() E' UNA FUNZIONE INTRINSECA DI MYSQL QUINDI NON STANDARD
    			string qselectionlastid="SELECT LAST_INSERT_ID() FROM clienti";
    			MySqlConnection readerconn = new MySqlConnection(connstring);
    			MySqlCommand cmdselectlastid = new MySqlCommand(qselectionlastid,readerconn);
    			MySqlDataReader reader;
    			readerconn.Open();
    			reader=cmdselectlastid.ExecuteReader();
    				
    			if(reader.Read())
    			{
    				uint Idc = (uint) reader.GetInt32(0);
    				//string	connstring = "Database=maximotogest;Data Source=localhost;User Id=root;Password=";
    				string queryCiclomotore = "INSERT INTO ciclomotori(Cliente,Tipo_veicolo,Colore,Marca,Modello,Cilindrata,Cod_telaio,Targa,Note_ciclomotore) VALUES("+Idc+",'"+tveicolo.Text.Replace("'","''")+"','"+tcolore.Text.Replace("'","''")+"','"+tmarca.Text.Replace("'","''")+"','"+tmodello.Text.Replace("'","''")+"',"+tcilind.Text+",'"+ttelaio.Text+"','"+ttarga.Text+"','"+tnote.Text.Replace("'","''")+"')";
    				MySqlConnection myconn = new MySqlConnection(connstring);
    				MySqlCommand cmdciclomotore = new MySqlCommand(queryCiclomotore);
    				
    				cmdciclomotore.Connection = myconn;
    				myconn.Open();
    				
    				cmdciclomotore.ExecuteNonQuery();
    				cmdciclomotore.Connection.Close();
    				MessageBox.Show("INSERIMENTO NUOVO CLIENTE RIUSCITO!.","Inserimento riuscito",MessageBoxButtons.OK,MessageBoxIcon.Information);
    				
    			}
    			reader.Close();
    			readerconn.Close();
    		}
    		
    	return true;
    	}
    Voglio l'alt+s anche per FF

  2. #2
    Ogni volta che dentro una funzione scrivi Return (false o true e' uguale) esci dalla funzione e non solo dall'eventuale controllo If ....
    Saluti a tutti
    Riccardo

  3. #3
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    bhè si.. ma non capisco dove vuoi arrivare.. :master:
    quindi cosa dovrei fare secondo te?
    Voglio l'alt+s anche per FF

  4. #4
    Originariamente inviato da dops
    bhè si.. ma non capisco dove vuoi arrivare.. :master:
    mah... non voglio fare molta strada
    se in cima alla tua funzione inserisci un controllo che ho se e' false o se e' true esce dalla funzione e' difficile che l'elaborazione della funzione continui.
    quindi cosa dovrei fare secondo te?
    Devi modificare la funzione. Potresti mettere ad esempio il controllo se il text=="" prima di validare e se text e' == a "" continui la funzione senza chiamare Return True. Similmente anche per gli altri controlli. Ma mettendo un breckpoint in cima alla funzione e passo passo vedere come si comporta quando la utilizzi non potrebbe aiutarti?
    Saluti a tutti
    Riccardo

  5. #5
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da riccardone
    Ma mettendo un breckpoint in cima alla funzione e passo passo vedere come si comporta quando la utilizzi non potrebbe aiutarti?
    Hai letto la mia firma? odio vs.net e non saprei sinceramente come mettere e come far funziona un breackpoint melo fai un esempio su una if nel mio codice?
    Voglio l'alt+s anche per FF

  6. #6
    Originariamente inviato da dops
    Hai letto la mia firma? odio vs.net e non saprei sinceramente come mettere e come far funziona un breackpoint
    E' normale che lo odi finche' non impari a padroneggiarlo almeno nelle funzionalita' di base. Una di queste funzionalita' e' il debug e non utilizzare gli strumenti di debug che l'ambiente offre ti fa perdere un sacco di tempo.
    Il breckpoint ad esempio e' utile in un caso come il tuo. Se metti un breckpoint in cima alla funzione (anche nella firma ad esempio) ed avvi l'applicazione con visualstudio l'esecuzione si blocchera' proprio nel punto del breckpoint. Quindi puoi farla continuare "passo a passo" premendo F9 ed osservando come si comporta il tuo codice, leggendo il contenuto delle variabili e/o dei valori di ritorno delle funzioni ecc.
    Per mettere un breckpoint basta cliccare col tasto sinistro sul fianco sinistro della riga di codice.
    melo fai un esempio su una if nel mio codice?
    codice:
    if(tcdf.Text.Length > 0)
    			{			
    			if(expcodfisc.Match(tcdf.Text).Success==false)
    			{				
    				MessageBox.Show("Il CODICE FISCALE non è formalmente corretto.\n Un codice fiscale corretto deve rispettare la forma di: 16 caratteri alfanumerici ordinati.","Errori riscontrati",MessageBoxButtons.OK,MessageBoxIcon.Warning);
    				return false;
    			}
    				}
    Saluti a tutti
    Riccardo

  7. #7
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    però vedi tu il return false glielo dai.. quindi è normale uscire dalla funzione quando questa ti ritorna false.. o no?
    Voglio l'alt+s anche per FF

  8. #8
    Originariamente inviato da dops
    però vedi tu il return false glielo dai.. quindi è normale uscire dalla funzione quando questa ti ritorna false.. o no?
    Ho presunto (ma che bel parolone) che se il codicefiscale inserito non va bene vuoi avvertire ed evitare di andare avanti. O no?
    Esci dalla funzione solo nel caso che il controllo e' false e non in ogni caso come avevi messo tu.
    Saluti a tutti
    Riccardo

  9. #9
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    mmm.. per i campi partita iva e codice fiscale ok.. ma per il controlle dei campi numerici (che devono contenere solo numeri) che sono tre di cui due possono essere lasciati vuoti, come mi devo comportare?:
    codice:
    	//controllo dei campi numerici
    		Regex expnumerica = new Regex("^[0-9]+$");	
    		if(expnumerica.Match(tcilind.Text).Success==false || expnumerica.Match(ttel.Text).Success==false || expnumerica.Match(tfax.Text).Success==false)
    		{
    			if(ttel.Text=="" || tfax.Text=="")
    			{
    			return true;
    			}
    			MessageBox.Show("Alcuni campi devono contenere solo caratteri NUMERICI, Nessun testo!\nI campo di tipo Numerico sono:\nCilindrata - Telefono - Fax","Errori riscontrati",MessageBoxButtons.OK,MessageBoxIcon.Warning);
    			return false;
    		}
    Voglio l'alt+s anche per FF

  10. #10
    Originariamente inviato da dops
    ma per il controlle dei campi numerici (che devono contenere solo numeri) che sono tre di cui due possono essere lasciati vuoti, come mi devo comportare
    Alla stessa maniera. Puoi provare ad usare anche il controllo ErrorProvider per gestire gli errori di imput dell'utente. Per la documentazione, trascina sul form ErrorProvider dalla toolbox e guarda nella guida dinamica.
    Saluti a tutti
    Riccardo

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.