當前位置: 首頁> 最新文章列表> 在表單處理過程中使用is_real 函數進行數據驗證

在表單處理過程中使用is_real 函數進行數據驗證

gitbox 2025-05-26

什麼是is_real()?

is_real()是PHP中的一個函數,早期版本中用於檢測變量是否為浮點數。在功能上它與is_float()is_double()等價。例如:

 $price = 12.99;
if (is_real($price)) {
    echo "價格是浮點數";
}

雖然這段代碼在PHP 7.4之前可以正常運行,但現代PHP版本中運行這段代碼將產生一個棄用警告,甚至在將來的版本中會完全移除這個函數。


更推薦的做法:使用is_float()

在表單處理過程中,用戶提交的數據通常以字符串的形式通過$_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進行驗證。


使用filter_var() 更安全地驗證浮點數

$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>