首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

價格輸入驗證最佳實踐:正則表達式 + 數值解析雙重檢核

     編輯:Java 相關知識

表單價格欄位驗證常見缺陷:僅前端攔截非數字字符,提交時未校驗小數位數、格式規範,導致髒數據入庫。本文提供「正則格式檢核 + 浮點數解析一致性比對」的雙重防線,兼容 JavaScript 前端與 Java 後端邏輯復用。

驗證需求

  • 必填、非空
  • 純數字字符,可選小數點
  • 小數位數 0-2 位(貨幣分級精度)
  • 字符串與 parseFloat 解析結果一致(排除 01.23、1. 等異常格式)

JavaScript 實現

function checkForm() {
    var price = document.form1.SoftPrice.value.trim();
    if (!price) {
        alert("請填寫軟件價格!");
        document.form1.SoftPrice.focus();
        return false;
    }
    if (!isPriceNumeric(price)) {
        alert("價格格式不正確:僅允許數字,小數點後最多兩位!");
        document.form1.SoftPrice.focus();
        return false;
    }
    return true;
}

function isPriceNumeric(str) {
    if (!str) return false;
    // 正則:整數部分至少一位,小數點可選,小數位 0-2 位
    var regex = /^[0-9]+(\.[0-9]{1,2})?$/;
    if (!regex.test(str)) return false;
    // 雙重檢核:字符串與浮點數解析結果完全一致
    try {
        return parseFloat(str) == str;
    } catch (e) {
        return false;
    }
}

Java 後端對等實現

public boolean isPriceNumeric(String str) {
    if (str == null || str.trim().isEmpty()) return false;
    String regex = "^[0-9]+(\\.[0-9]{1,2})?$";
    if (!str.matches(regex)) return false;
    try {
        return Double.parseDouble(str) == Double.valueOf(str);
    } catch (NumberFormatException e) {
        return false;
    }
}

關鍵點解析

檢核層作用攔截案例
正則格式結構合法性abc, 1.2.3, 1., .23, 01.23
parseFloat 一致性語義等價性1.00→1 (不一致), 01.23→1.23 (不一致)

擴展建議

  • 金額上限檢核:parseFloat(str) <= MAX_PRICE
  • 前端輸入掩碼:oninput="this.value=this.value.replace(/[^0-9.]/g,'')" 輔助用戶,但不可替代提交時完整驗證。
  • 後端必須再次驗證,防繞過前端攔截。

雙重檢核模式簡單可靠,可直接納入項目通用驗證工具庫,消除價格字段數據質量隱患。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved