Oft ist es ja so, dass man einen Integer validieren möchte, der allerdings als String vorliegt (bei SOAP z.B.). Das heißt, dass uns is_int nicht weiterhilft, wie folgender Schnippsel zeigt:
var_dump(is_int("12")); //false
Klar, ist kein int – kann man PHP keinen Strick draus drehen. Alternative ist is_numeric.
var_dump(is_numeric("12")); //true
Ah, wunderbar – warum auch immer jetzt auf einmal Strings kein Problem mehr darstellen. Aber:
var_dump(is_numeric("12.123456")); //true
Klar irgendwie, „numeric“ heißt nicht zwangsläufig gerade. Deswegen (meines Erachtens nach der beste Weg): intval
intval konvertiert (sofern möglich, also wenn etwa ein int in einem String vorliegt) zu Integer, allerdings kommt bei allen anderen Inputs (bspw. „wirkliche“ Strings) 0 raus. intval schneidet von Kommazahlen die Nachkommastellen ab. Mein Ansatz würde dann also so aussehen:
$number = 12.123456; doStuff($number); function doStuff($number) { $number = intval($number); if ($number > 0) { /* doStuff */ } }
Es ist halt trotz allem genau abzuwägen, ob das „wegcasten“ eventueller Nachkommastellen im jeweiligen Anwendungsfall okay ist.
Man benutzt ctype_ um Strings zu prüfen.
-> ctype_digit(„12“)