Иногда вы хотите проверить ввод, который должен быть числом, но в $_GET
или $_POST
вы получите его в виде строки.is_numeric()
может быть проблематично, поскольку он допускает шестнадцатеричный, двоичный и восьмеричный формат (из руководства):
Thus +0123.45e6 is a valid numeric value. Hexadecimal (e.g. 0xf4c3b00c), Binary (e.g. 0b10100111001), Octal (e.g. 0777) notation is allowed too but only without sign, decimal and exponential part.
Вы не можете использовать is_int()
, поскольку это только для целочисленных значений(не строка!) так ... Вы можете проверять числа, которые являются строковыми и целыми числами, следующим образом:
function is_int_val($value){
if( ! preg_match( '/^-?[0-9]+$/', $value ) ){
return FALSE;
}
/* Disallow leading 0 */
// cast value to string, to make index work
$value = (string) $value;
if( ( $value[0] === '-' && $value[1] == 0 ) || ( $value[0] == 0 && strlen( $value ) > 1 ) ){
return FALSE;
}
return TRUE;
}
is_int_val('33'); // true
is_int_val('33a'); // false
is_int_val('033'); // false
Также можно переопределить функцию is_int (), используя override_function () но это может быть полезно в оригинальной версии.