Newsgroup: it.comp.www.php
Titolo: Controllo tipo di dati

Ciao a tutto il NG..
Ho un problema talmente banale che mi vergogno a porlo, ma purtroppo non
trovo la funzione adeguata.. :-)
Vorrei fare un if che controlli che una variabile $numero non contenga
lettere, ma che sia solo di tipo integer.
Es:
if ($numero != integer){
  print "Errore";
  }
  else
  {
blablabla
}
Qualcuno e' in grado di correggere l'eresia che ho scritto sopra? :-)
Grazie a tutti
Luciano

lettere, ma che sia solo di tipo integer.
Vari modi:
	if ($numero != (0+$numero))
	{
		// non e' un intero :-)
		// Anche se "055" per esempio non so cosa farebbe.
	}
	if (!(ereg($numero,"^[1-9][0-9]*"))
	{
		// Non sono sicuro della sintassi di ereg, vai
		// a controllarla :-)
	}
	...
Leonardo
-- 
Nior thainig ar major i dtus an lae chugainn,
is ni rabhamar fein ann i gcoir na gceart
ach mar sheolfai aoireacht bo gan aoire,
ar thaobh na greine de Sliabh na mBan.

 Qualcuno e' in grado di correggere l'eresia che ho scritto sopra? :-)
Io farei così :
if (!is_int($numero))
{}
else
{}
Chissà, magari si può ancora migliorare...
Cyo,
--
RaSca
http://web.tiscalinet.it/rascasoft

 }
Questa funziona correttamente, e bene! :-)
Mancava solo una parentesi finale.
Giusto per amore di testing, la tua prima versione accettava comunque le
lettere, mentre per la stringa di Rasca non accettava nulla, dava errore a
tutte le variabili (numeri compresi).
Grazie a tutti!
Luciano

> > if (!(ereg($numero,"^[1-9][0-9]*")))
Ho scoperto che funziona solo (misteriosamente) con il numero 1 (se uso come
variabile ad es. 6, non funziona)..
Come e' possibile? Ho controllato il comando ereg, e la sintassi e' giusta..
Bah.
Grazie ancora
Luciano

 variabile ad es. 6, non funziona)..
Spero che sia l'ultima versione.. :-)
ecco qui:
if (!(ereg("^[1-9][0-9]$", $numero)))
ho messo la variabile dopo le condizioni, e ho sostituito * con $ per
evitare che accetti valori tipo 1testo anziche' 1.
Ciao
Luciano

 evitare che accetti valori tipo 1testo anziche' 1.
ok, ma prova ad impostare 
$numero = 1;
oppure 
$numero = 123; 
e vedrai che fallisce! :-)
La soluzione (si spera definitiva!) č:
"^[1-9][0-9]*$"
Ciao
--ev

 if (!(ereg("^[1-9][0-9]$", $numero)))
Cosi` ti accetta solo numeri di 2 cifre, di cui la prima non puo` essere
0.
Quella corretta dovrebbe essere
"^[1-9][0-9]*$"
Se ti va bene anche se il numero inizia per 0 puoi semplificare in 
"^[0-9]+$"
Se ti basta che NON siano lettere (quindi includendo anche la stringa
vuota):
"^[0-9]*$"
Bye.

 Ho paura di no! :-)
Infatti avevi ragione.. :-)
Ci ho picchiato ancora un pň il naso, e la versione che piů e' consona alle
mie esigenze e' stata:
if (!(ereg("^[0-9]{1,3}$", $numero)))
tutto questo per non far visualizzare pagine vuote del mio sito, che pesca i
dati di un database a seconda del $numero..
In poche parole, ho fatto fare un conto delle rows, e se il $numero e'
superiore rimanda ad una pagina di errore.
A me interessava che:
http://www.miosito.it/pagina.php?numero=2
 fosse valida
http://www.miosito.it/pagina.php?numero=250
 non fosse valida
http://www.miosito.it/pagina.php?numero=2a
 non fosse valida
http://www.miosito.it/pagina.php?numero=a2
 non fosse valida
http://www.miosito.it/pagina.php?numero=ifattimiei
 non fosse valida
http://www.miosito.it/pagina.php
 non fosse valida
http://www.miosito.it/pagina.php?num=2
 non fosse valida
Riuscire a soddisfare tutte queste condizioni e' stato un lavoraccio, ma
grazie a voi ce l'ho fatta... :-)
PS. Se a qualcuno interessa la parte di codice, mi scriva..
Grazie ancora..
Luciano