PHP: Is_numeric возвращает false на 0
Is_numeric()
так же как is_int()
возвращает значение false, если значение равно 0. Что я могу сделать вместо этого, чтобы убедиться, что конкретное значение является числами только в PHP?
Мы направляемся прямо в лагерь регулярных выражений, или уже есть какая-то приятная, удобная функция для этого?
Спасибо!
7 ответов
Перезапустил PHP на сервере, и теперь он работает хорошо. Хотя понятия не имею, почему это произошло. Спасибо всем за помощь!
Это возвращается для меня в обоих случаях:
var_dump(is_numeric(0));
var_dump(is_int(0));
Результат:
bool(true)
bool(true)
Ноль, так как целое число пусто. Поэтому убедитесь, что нет проверки на пустоту, прежде чем проверять Is_numeric() или is_int()
var_dump(is_int("0"));
Передаст false, потому что вы передаете ему ноль как строковый литерал. Вы можете попробовать передать то же самое, что и переменная, которая прошла через (я полагаю) parseInt("");
Хотя мой php, возможно, немного не в себе, он был безостановочным Javascripting последние неделю или две.
Когда вы имеете дело с REQUEST, лучше сначала проверить ввод, используя filter_input. Вот пример проверки 'id' из $_GET.
filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT)
полный пример
if (is_int(filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))) {
$id = $_GET['id'];
} else {
die('please input a integer');
}
Ну, функция придумывает версию PHP >= 5.2.
Я боролся с той же проблемой, и оказалось, что после числа был пробел.
Короче говоря, сколько бы ни было число:
is_numeric(" 0.0") --> YES
is_numeric("0.0 ") --> NO
Вот пример...
public function getCoordinates()
{
return sprintf('%1$f , %2$f',$this->getLatitude(),$this->getLongitude());
}
Позже в процессе...
$myarr = explode(",",$_ScreenCoordinates);
echo "_ScreenCoordinates:$_ScreenCoordinates<br>";
echo "myarr[0]:".$myarr[0]." - ".((is_numeric($myarr[0]))?"YES":"NO")."<br>";
echo "myarr[1]:".$myarr[1]." - ".((is_numeric($myarr[1]))?"YES":"NO")."<br>";
echo "trimmed[0]:".$myarr[0]." - ".((is_numeric(trim($myarr[0])))?"YES":"NO")."<br>";
Напечатано на экране:
Array ( [0] => 1.200000 [1] => 123.456000 )
_ScreenCoordinates:1.200000 , 123.456000
myarr[0]:*1.200000 * - NO
myarr[1]:* 123.456000* - YES
trimmed[0]:*1.200000 * - YES
Это также может произойти, если это 0
является логическим FALSE
по факту.is_numeric()
всегда возвращается FALSE
для логического.
if($price != 0) {
if(is_numeric($price)) {
$price = $price; // numeric
} else { // is not numeric }
} else {
$price = $price; // 0 as numeric
}