come mettere controlli su form di inserimento dati??

  • Creatore Discussione Creatore Discussione temino
  • Data di inizio Data di inizio

temino

Utente Attivo
22 Gen 2011
47
0
0
Salve a tutti... sto realizzando una pagina in php per l'inserimento di dati anagrafici.
Come faccio ad impostare una funzione che mi limita le lettere da "a" a "z" per i campi nome e cognome e numeri da 0 a 9 per il cap???

Grazie in anticipo!!
 
Per gli alfabetici:
PHP:
if (preg_match("/^[a-zA-Z]$/", $_POST['nome'])) {
    echo "Formato non corretto";
}
Per i numerici dovrebbe bastare:
PHP:
if(!ctype_digit($_POST['cap']))
{
   echo "Formato non corretto";
}
 
ciao
oltre a quello che ha detto eliox, prova questa

PHP:
<?php
function ver_cap($cap){
	if(!preg_match("/^[0-9]{5,5}$/",$cap)){
		return FALSE;// non un numero o numero non di 5 cifre
	}else{
		$cap=(int)$cap+0;//trasformo comunque in numero
		if($cap ==0 || $cap < 10){//credo che il cap più piccolo sia 00010 in provincia di roma
			return FALSE;//erano tutti zeri
		}else{
			return $cap;//cap valido
		}
	}
}
//verifica della function
$es=array("aaa","aa345","35100","00000","00005" ,"235","00011","00009");// solo 35100 e 00011 è un vero cap
foreach($es as $valore){
	if(ver_cap($valore)){
		echo "<b>questo $valore è un CAP</b><br>";
	}else{
		echo "$valore NON è un CAP valido<br>";
	}
}
?>
 
aggiungo un'ulteriore difficoltà XD (perlomeno per me!) .. e se volessi mettere un controllo sul campo "peso", che può contenere solo i 10 caratteri numerici e la virgola??.. come potrei fare??
 
ciao
tiratina d'orecchi a alex, prova
PHP:
$es=array('aa','123,78','678.37','12o,98','325,25,33','22.22.33');
foreach($es as $valore){
	if(preg_match('/^[0-9\,]+$/', $valore)){
		echo "$valore è un numero float<br>";
	}else{
		echo "$valore NON è un numero<br>";
	}
}
questo è l'out
aa NON è un numero
123,78 è un numero float
678.37 NON è un numero
12o,98 NON è un numero
325,25,33 è un numero float
22.22.33 NON è un numero
cosa succede se poi deve usare tale numero per un calcolo?

p.s.
il colore rosso l'ho aggiunto per evidenziare
 
ciao
potresti provare questa

PHP:
<?php
function ver_float($num){
	$num = str_replace(chr(44), ".", $num);//sostituisco l'eventuale virgola/e, per i calcoli i numeri devono avere il .
	if(count(explode(".",$num)) > 2){
		return FALSE; //c'è più di un punto, quindi numero non valido
	}else{
		if(preg_match('/^[0-9.]+$/', $num)){
			// qui potresti mettere la verifica se troppo grande o troppo piccolo
			return $num;//è un numero float
		}else{
			return FALSE;//non è un numero
		}
	}
}
//prova della function
$es=array('aa','123,78','678,375','12o,98','325,25,33','22.22.33','333.0','111');
foreach($es as $valore){
	if(ver_float($valore)){
		echo ver_float($valore)." è un numero float (era: $valore)<br>";
	}else{
		echo "$valore NON è un numero<br>";
	}
}
?>

p.s.
nota per alex:
ho provato con filter_var, ma non riesco a farla funziare, perche? (non dirmi che è perche non ho la ver. di php giusta perche con l'email funzia)
 
Io mi sono attenuto a quello che lui ha chiesto: il campo deve consentire l'inserimento di numeri e virgole. Prova con questa (consente uno o più numeri, che possono essere seguiti da un punto o una virgola che a loro volta devono essere seguiti da uno o più numeri):
PHP:
preg_match('/^([0-9]+)((\,|\.)?[0-9]+)?$/', $value);
Comunque un modo più immediato è:
PHP:
is_numeric(str_replace(',', '.', $value));
 
ciao
hai ragione, non avevo pensato a is_numeric()
però come mai come ho detto la
filter_var($valore,FILTER_VALIDATE_FLOAT);
non mi funzia ? (ho il php di ver. giusto)
 
ciao
scusa, arteriosclerosi !! il mio vecchio progr non ha il giusto php, quindi non mi evidenziava il colore della funzione e io scrivevo
fiter_var(ecc..) cioè filter senza l
ecco così

PHP:
$es=array('aa','123,78','678,375','12o,98','325,25,33','22.22.33','333.0','111');
foreach($es as $valore){
	if(filter_var(str_replace(',', '.', $valore),FILTER_VALIDATE_FLOAT)){
		echo "$valore è un numero float (era: $valore)<br>";
	}else{
		echo "$valore NON è un numero<br>";
	}
}
 

Discussioni simili