2012-03-05 25 views
5

En PHP, parece que cada objeto se puede convertir en un entero, simplemente llamando al intval($object), pero esto no es lo que quiero. Lo que quiero es verificar si el objeto sería válido para convertirse en un entero para lo que un humano cree que es.¿Comprobar PHP si el objeto se puede convertir a entero?

es decir, objetos válidos serían

  • 12
  • 12.0
  • "12"
  • "12.0"

Y no sería válida

  • MyFooInstance()
  • "some string"
  • "12.0.0"
  • "0 12.0"

etc. en Python, pude simplemente a lo siguiente:

try: 
    int(var) 
except (TypeError, ValueError): 
    return False 
return True 

Como puedo achive esto en PHP?

+1

[El comportamiento de convertir ** objetos ** a entero no está definido.] (Http://php.net/manual/en/language.types.integer.php#language.types.integer.casting) – Gordon

+0

Ir Ir con Dogbert y refiera Gordon –

Respuesta

8

Utilice is_numeric.

<?php 
$tests = array(
    "42", 
    1337, 
    "1e4", 
    "not numeric", 
    array(), 
    9.1 
); 

foreach ($tests as $element) { 
    if (is_numeric($element)) { 
     echo "'{$element}' is numeric", PHP_EOL; 
    } else { 
     echo "'{$element}' is NOT numeric", PHP_EOL; 
    } 
} 
?> 


'42' is numeric 
'1337' is numeric 
'1e4' is numeric 
'not numeric' is NOT numeric 
'Array' is NOT numeric 
'9.1' is numeric 

(En la página)

+0

¡Gracias, debe haberse perdido eso! –

-1

probar esto

if((int)$variable) {... 
+1

La condición en 'if ((int) $ variable)' se evaluaría como 'false' cuando' $ variable == 0'. –

+0

sí, se olvidó de ese "pequeño" detalle :) –

3

Entero (no sólo numérica) Prueba:

function is_integerable($v){ 
    return is_numeric($v) && +$v === (int)(+$v); 
} 

Resultados:

$str => is_integerable($str) 
'-1' => true 
'-1.00' => true 
'-1.11' => false 
'1e4' => true 
'1e40' => false 

Ver:

http://codepad.org/LoqfAgNl

+0

Muchas gracias, pero 'is_numeric' también. :) –

1

Ver PHP de ctype_digit().

Esta función evalúa una cadena para ver si todos los caracteres son numéricos. Por lo tanto, "1.1" no devolverá true porque "." no es numérico, pero "11" lo hará. También tenga en cuenta que esto funciona solo para cadenas, por lo que los números sin las comillas circundantes tampoco funcionarán.

Cuestiones relacionadas