is_float не обнаруживает числа с плавающей точкой

я использую is_float() проверить, является ли введенное число с плавающей точкой или нет, но оно продолжает выбрасывать echo() сообщение при входе 3.00, Есть ли другое решение для этого? Или я что-то не так делаю?

Вот мой код:

PHP:

if(!is_float($_POST["gpa"])){
echo "GPA must be in #.## format.";
}

HTML:

<input type="text" name="gpa" />

-1

Решение

Входные данные формы всегда являются строкой, поэтому условие if всегда будет возвращать указанное вами сообщение об ошибке. Использовать filter_var() вместо.

if(filter_var($_POST['gpa'], FILTER_VALIDATE_FLOAT) === false) {
echo "GPA must be in #.## format.";
}

Если вы хотите проверить формат, который вам нужно использовать Реджулар бывшийpressions.

([0-9]{1,})\.([0-9]{2,2})

Вы можете использовать RegEx в одиночку и забыть о filter_var(), поскольку он делает то же самое.

if(preg_match('/([0-9]{1,})\.([0-9]{2,2})/', $_POST['gpa']) == 0) {
echo "GPA must be in #.## format.";
}
4

Другие решения

попробуй это :

$num = 2.6;

if($num === floatval($num)){
echo 'is float';
}else{
echo 'is not';
}

Другой способ это регулярное выражение:

$num = '345.56678';//post is string

$patt = '/^\d+\.{1}\d+$/';
$resp = preg_match($patt,$num);
if($resp){
echo 'is float';
}else{
echo 'is not';
}
3

От документация

Находит ли тип данной переменной является float.

Чтобы проверить, является ли переменная числом или числовой строкой (например, ввод формы, который всегда является строкой), вы должны использовать is_numeric ().

По определению ваш $_POST["gpa"] это строка, а не число с плавающей точкой. Вы можете увидеть это, когда вы делаете var_dump($_POST["gpa"])

2

Правильный способ проверки значения с плавающей точкой в ​​строке будет:

if( !filter_var($_POST["gpa"], FILTER_VALIDATE_FLOAT) ) echo 'error!';
2
По вопросам рекламы [email protected]