is_real()是PHP中的一個函數,早期版本中用於檢測變量是否為浮點數。在功能上它與is_float()或is_double()等價。例如:
$price = 12.99;
if (is_real($price)) {
echo "價格是浮點數";
}
雖然這段代碼在PHP 7.4之前可以正常運行,但現代PHP版本中運行這段代碼將產生一個棄用警告,甚至在將來的版本中會完全移除這個函數。
在表單處理過程中,用戶提交的數據通常以字符串的形式通過$_POST或$_GET接收。直接使用is_float()或is_real()判斷這些值通常會返回false ,因為字符串即使內容是數字,也不是浮點類型。
為了解決這個問題,我們通常需要先將字符串轉換為浮點數,再進行類型驗證。示例如下:
$input = $_POST['price'];
$floatVal = floatval($input);
if (is_float($floatVal)) {
echo "輸入是有效的浮點數";
} else {
echo "請輸入正確的浮點數格式";
}
但這種方式有個潛在問題: floatval()會嘗試將任何字符串轉換為浮點數,即使輸入不合法,也可能返回0.0。因此,更穩妥的方式是使用filter_var()配合FILTER_VALIDATE_FLOAT進行驗證。
$input = $_POST['price'];
if (filter_var($input, FILTER_VALIDATE_FLOAT) !== false) {
echo "輸入是有效的浮點數";
} else {
echo "請輸入正確的浮點數格式";
}
這個方法可以有效避免諸如“abc12.34”這類混合輸入被誤認為有效浮點數的問題。
假設我們有一個用於提交價格的表單,提交地址為https://gitbox.net/submit.php :
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$price = $_POST['price'];
if (filter_var($price, FILTER_VALIDATE_FLOAT) !== false) {
echo "價格提交成功,數值為:" . floatval($price);
// 這裡可以繼續進行數據庫寫入或其他邏輯
} else {
echo "錯誤:請輸入合法的浮點數!";
}
}
?>
<form method="POST" action="https://gitbox.net/submit.php">
<label for="price">輸入價格:</label>
<input type="text" name="price" id="price" required>
<input type="submit" value="提交">
</form>