Не самый быстрый метод, но filter_var()
довольно точен:
function test($s)
{
return filter_var($s, FILTER_VALIDATE_INT) !== false;
}
Вот результаты, основанные на ответе Джхонга , различия помечены !!
:
var_dump(test(1) ); // true
var_dump(test('1') ); // true
var_dump(test('1.0') ); // false !!
var_dump(test('1.1') ); // false
var_dump(test('0xFF') ); // false
var_dump(test('0123') ); // false !!
var_dump(test('01090') ); // false !!
var_dump(test('-1000000') ); // true
var_dump(test('+1000000') ); // true
var_dump(test('2147483648') ); // true !! on 64bit
var_dump(test('-2147483649')); // true !! on 64bit
Чтобы разрешить восьмеричные целые числа:
function test($s)
{
return filter_var($s, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_OCTAL) !== false;
}
Результаты:
var_dump(test('0123') ); // true
var_dump(test('01090')); // false !!
Чтобы разрешить шестнадцатеричное обозначение:
function test($s)
{
return filter_var($s, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX) !== false;
}
Результаты:
var_dump(test('0xFF')); // true !!