Используйте
filter_var() и фильтр
валидации FILTER_VALIDATE_INT
:
$input = "22";
$test = filter_var( $input, FILTER_VALIDATE_INT);
if( $test === false) throw new Exception("не целое что-то");
$test // содержит точно целое число
По скорости 1E6 итераций разных выражений у меня
1.92 секунды против
3.15 секунд с регулярками. Тест проводил так:
$tests = [
'5qwerty' => false,
'55' => 55,
'1234567890' => 1234567890,
'123Z456' => false,
'A10' => false,
];
$start = microtime(true);
for ($i = 0; $i <= 1E6; $i++) {
foreach( $tests as $test => $result) {
if( $result !== filter_var( $test, FILTER_VALIDATE_INT)) throw new Exception("Mismatch");
// if( !!preg_match('/^\d+$/', $test) !== !!$result) throw new Exception("Mismatch");;
}
}
echo (microtime(true) - $start) . PHP_EOL;