PHPで整数を判定する
ウェブアプリを作っていると、値が整数なのか確認するべきタイミングが多く出てきます。セキュリティー的にも変数に代入された値が整数か否か、確認するのは重要です。以下の関数を使い分けて、より強固な仕組みを構築してください。
is_numeric関数
数字または数値形式の文字列か調べます。文字列型でも小数点でも数値ならOKと判定してくれます。
<?php
// 型ごとに変数に格納
$str = '255'; // 文字列(string)型
$int = 255; // 整数(int)型
$flt = 255.99; // 浮動小数点(float)型
// 文字列(string)型の判定
if(is_numeric($str)){
echo "文字列string OK";
}else{
echo "文字列string NO";
}
// 整数(int)型
if(is_numeric($int)){
echo "整数int OK";
}else{
echo "整数int NO";
}
// 小数(float)型
if(is_numeric($flt)){
echo "小数float OK";
}else{
echo "小数float NO";
}
is_int関数
整数(int)型か調べます。数値でも文字列型だとNO判定なので厳しい。
<?php
// 型ごとに変数に格納
$str = "255"; // 文字列(string)型
$int = 255; // 整数(int)型
$flt = 255.99; // 浮動小数点(float)型
// 文字列(string)型の判定
if(is_int($str)){
echo "文字列string OK";
} else {
echo "文字列string NO";
}
// 整数(int)型の判定
if(is_int($int)){
echo "整数int OK";
}else{
echo "整数int NO";
}
// 小数(float)型の判定
if(is_int($flt)){
echo "小数float OK";
}else{
echo "小数float NO";
}
ctype_digit関数
文字列が数字かどうか調べます。文字列を判定する関数で、整数int型だとfalse
判定になるこることもあるため、文字列のみを指定するようにした方がベターかも。
<?php
// 型ごとに変数に格納
$str = "255"; // 文字列(string)型
$int = 255; // 整数(int)型
$flt = 255.99; // 浮動小数点(float)型
//文字列(string)型の判定
if(ctype_digit($str)){
echo "文字列string OK";
}else{
echo "文字列string NO";
}
// 整数(int)型の判定
if(ctype_digit($int)){
echo "整数int OK";
}else{
echo "整数int NO";
}
// 小数(float)型の判定
if(ctype_digit($flt)){
echo "小数float OK";
}else{
echo "小数float NO";
}
preg_match関数
正規表現で判定。
<?php
// 型ごとに変数に格納
$str = "255"; // 文字列(string)型
$int = 255; // 整数(int)型
$flt = 255.99; // 浮動小数点(float)型
//文字列(string)型の判定
if(preg_match("/^[0-9]+$/", $str)){
echo "文字列string OK";
}else{
echo "文字列string NO";
}
//整数(int)型の判定
if(preg_match("/^[0-9]+$/", $int)){
echo "整数int OK";
}else{
echo "整数int NO";
}
//小数(float)型の判定
if(preg_match("/^[0-9]+$/", $slt)){
echo "小数float OK";
}else{
echo "小数float NO";
}
コメント