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???
Ti potrebbero essere di aiuto le espressioni regolari. Di preciso "/^[a-z]*$/" per le lettere e "/^[0-9]*$/" per i numeri. Prova dare un occhiata alla funzione preg_match().
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??
$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
<?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):
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>";
}
}