ウェブサービスを作っています。

変数の値が数字だけかどうか厳密に調べる

  • is_int

文字列型で false になります。
マイナスの値で true になります。

<?php
var_dump(is_int('5'));  // false
var_dump(is_int(-5));   // true
  • ctype_digit

整数型で false になります。

<?php
var_dump(ctype_digit(5));   // false
  • is_numeric

マイナスの値や浮動小数点型で true になります。

<?php
var_dump(is_numeric('-5'));     // true
var_dump(is_numeric('5.5'));    // true


フォームからの入力値は通常文字列型で入ってくるので、入力値チェックでは ctype_digit() を使えばよさそうです。
でも、preg_match() を使えば型に左右されないようです。

<?php
var_dump(preg_match('/^[0-9]+$/', 5));   // int(1)
var_dump(preg_match('/^[0-9]+$/', '5')); // int(1)

PHP って、こういう厳密なところがいい加減で困ります。
ふつうに書籍とかでも「数字かどうか調べるには is_numeric() を使いましょう」とか、堂々と書いてあります。