Bu bakın. Orijinal $ val dizeye dönüştürülür eğer kontrolleri tamsayı ve $ val dönüştürür (===) aynıdır - beklendiği gibi sadece == çalışmaz - val dizeye dönüştürülür tamsayı.
function validInt($val, $min=null, $max=null) {
$ival = intval($val);
//echo "'$ival' '$val'<br>\n"; // Uncomment to see the comparisons done in below if block
if(''.$ival !== ''.$val) {
return false;
}
if($min !== null && $ival < $min)
return false;
if($max !== null && $ival > $max)
return false;
return true;
}
Eğer dize değerlerini kontrol etmezseniz size beklediğiniz gibi çalışmayabilir:
$nums = array(
'1',
'+1',
'-1',
'01',
'1.0',
'.0',
'1.123',
'a123',
'0x101010',
1,
-1,
01,
1.0,
.0,
1.123,
0x101010,
);
foreach($nums as $num) {
if(validInt2($num))
echo $num." - Valid integer.<br>\n";
else
echo $num." - Not a valid integer.<br>\n";
}
Çıktı:
1 - Valid integer.
+1 - Not a valid integer.
-1 - Valid integer.
01 - Not a valid integer.
1.0 - Not a valid integer.
.0 - Not a valid integer.
1.123 - Not a valid integer.
a123 - Not a valid integer.
0x101010 - Not a valid integer.
1 - Valid integer.
-1 - Valid integer.
1 - Valid integer.
1 - Valid integer.
0 - Valid integer.
1.123 - Not a valid integer.
1052688 - Valid integer.
Eğer hex (0x101010) kullansanız bile varlık sebebi, sekizli (01) veya şamandıra (1.0, 0.0) olarak depolanan bir tamsayı, dahili tüm float olarak saklanır. Bir dize olarak depolanan int denetlemek için işlevini kullanın Ancak, bu iş olacak.