я использую is_float()
проверить, является ли введенное число с плавающей точкой или нет, но оно продолжает выбрасывать echo()
сообщение при входе 3.00
, Есть ли другое решение для этого? Или я что-то не так делаю?
Вот мой код:
PHP:
if(!is_float($_POST["gpa"])){
echo "GPA must be in #.## format.";
}
HTML:
<input type="text" name="gpa" />
Входные данные формы всегда являются строкой, поэтому условие 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.";
}
попробуй это :
$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';
}
От документация
Находит ли тип данной переменной является float.
Чтобы проверить, является ли переменная числом или числовой строкой (например, ввод формы, который всегда является строкой), вы должны использовать is_numeric ().
По определению ваш $_POST["gpa"]
это строка, а не число с плавающей точкой. Вы можете увидеть это, когда вы делаете var_dump($_POST["gpa"])
Правильный способ проверки значения с плавающей точкой в строке будет:
if( !filter_var($_POST["gpa"], FILTER_VALIDATE_FLOAT) ) echo 'error!';