jquery 验证数字小数点后两位小数点

admin 103 0
jQuery实现数字小数点后两位验证,主要用于规范价格、金额等输入场景,通过正则表达式/^\d+(\.\d{1,2})?$/匹配整数或最多两位小数,在input的blur事件或表单提交时触发验证,使用test()方法检测输入值,若不符合则提示错误并阻止提交,同时需处理空值或非数字输入,结合$.trim()去除空格,isNaN()判断非数字情况,确保验证严谨性,此方法能有效提升数据规范性,避免因格式错误导致的后续处理问题,适用于电商、财务等对数值精度要求较高的场景。

jQuery 实现数字输入小数点后两位验证的完整指南

在表单开发中,数字输入的格式校验是常见需求,尤其是在处理金额、价格、数量等场景时,限制小数点后最多两位是确保数据规范性和准确性的关键环节,jQuery 作为一款轻量级 JavaScript 库,凭借其简洁易用的 API 和强大的 DOM 操作能力,能够高效实现这类验证功能,本文将详细介绍如何使用 jQuery 实现数字输入的小数点后两位验证,包括正则表达式设计、事件绑定、错误提示以及用户体验优化等核心步骤,并附上完整可运行的代码示例。

验证需求与正则表达式设计

明确验证规则

小数点后两位验证的核心规则通常包括:

  • 输入值可以是整数(如 100)或小数(如 75);
  • 小数点后最多允许两位(如 5 输入后自动补全为 00555 输入时自动截断为 55);
  • 不允许输入非法字符(如字母、特殊符号、多个小数点等);
  • 可根据业务需求决定是否允许负数或前导零(如 034 是否合法);
  • 空值处理(是否允许空输入)。

正则表达式设计

基于上述规则,核心正则表达式为:

/^\d+(\.\d{1,2})?$/

正则表达式解析

  • ^:匹配字符串开头,确保从开始就符合规则
  • \d+:匹配 1 位或多位整数(正整数,不含符号)
  • (\.\d{1,2})?:匹配可选的小数部分:
    • \.:匹配小数点(需转义)
    • \d{1,2}:匹配 1 位或 2 位小数
    • 表示整个小数部分可选
  • 匹配字符串结尾,确保到结束都符合规则

常见变体

  • 若需允许负数:^-?\d+(\.\d{1,2})?$
  • 若不允许前导零(如 012 不合法):^(0|[1-9]\d*)(\.\d{1,2})?$
  • 若必须包含小数点:^\d+\.\d{1,2}$
  • 若允许科学计数法:^-?\d+(\.\d+)?([eE][+-]?\d+)?$

jQuery 实现验证的完整步骤

基础 HTML 结构

首先创建一个包含输入框和错误提示的表单结构:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">jQuery 小数点后两位验证</title>
    <style>
        .input-group {
            margin: 20px;
            max-width: 400px;
        }
        label {
            display: block;
            margin-bottom: 5px;
            font-weight: bold;
        }
        input {
            width: 100%;
            padding: 8px;
            border: 1px solid #ccc;
            border-radius: 4px;
            box-sizing: border-box;
            transition: border-color 0.3s;
        }
        input:focus {
            outline: none;
            border-color: #4CAF50;
        }
        input.error {
            border-color: #f44336;
        }
        .error-msg {
            color: #f44336;
            font-size: 12px;
            margin-top: 5px;
            display: none;
        }
        .success-msg {
            color: #4CAF50;
            font-size: 12px;
            margin-top: 5px;
            display: none;
        }
        .format-display {
            margin-top: 10px;
            font-size: 14px;
            color: #666;
        }
    </style>
</head>
<body>
    <div class="input-group">
        <label for="number-input">请输入数字(小数点后最多两位):</label>
        <input type="text" id="number-input" placeholder="100 或 100.50">
        <div class="error-msg" id="error-tip">请输入正确的数字格式(小数点后最多两位)</div>
        <div class="success-msg" id="success-tip">格式正确</div>
        <div class="format-display" id="format-display"></div>
    </div>
    <!-- 引入 jQuery -->
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        $(document).ready(function() {
            const $numberInput = $('#number-input');
            const $errorTip = $('#error-tip');
            const $successTip = $('#success-tip');
            const $formatDisplay = $('#format-display');
            // 正则表达式:小数点后最多两位
            const decimalRegex = /^\d+(\.\d{1,2})?$/;
            // 实时验证
            $numberInput.on('input', function() {
                const value = $(this).val();
                // 空值处理
                if (value === '') {
                    $(this).removeClass('error');
                    $errorTip.hide();
                    $successTip.hide();
                    $formatDisplay.text('');
                    return;
                }
                // 验证格式
                if (decimalRegex.test(value)) {
                    $(this).removeClass('error');
                    $errorTip.hide();
                    $successTip.show();
                    // 格式化显示
                    let formattedValue = value;
                    if (value.includes('.')) {
                        const parts = value.split('.');
                        if (parts[1].length === 1) {
                            formattedValue = value + '0';
                        } else if (parts[1].length > 2) {
                            formattedValue = parts[0] + '.' + parts[1].substring(0, 2);
                        }
                    } else {
                        formattedValue = value + '.00';
                    }
                    $formatDisplay.text('格式化后:' + formattedValue);
                } else {
                    $(this).addClass('error');
                    $errorTip.show();
                    $successTip.hide();
                    $formatDisplay.text('');
                }
            });
            // 失焦时处理
            $numberInput.on('blur', function() {
                const value = $(this).val();
                // 自动补全小数点后两位
                if (value && !value.includes('.')) {
                    $(this).val(value + '.00');
                }
                // 如果输入无效且不为空,清空输入
                if (value && !decimalRegex.test(value)) {
                    setTimeout(() => {
                        $(this).val('');
                        $(this).removeClass('error');
                        $errorTip.hide();
                        $successTip.hide();
                        $formatDisplay.text('');
                    }, 2000);
                }
            });
            // 阻止非法字符输入
            $numberInput.on('keypress', function(e) {
                const char = String.fromCharCode(e.which);
                // 允许数字、小数点、退格、删除
                if (!/[\d.]/.test(char) && !e.ctrlKey && 
                    e.which !== 8 && e.which !== 46 && e.which !== 37 && e.which !== 39) {
                    e.preventDefault();
                }
                // 防止输入多个小数点
                if (char === '.' && $(this).val().includes('.')) {
                    e.preventDefault();
                }
            });
        });
    </script>
</body>
</html>

核心功能实现解析

  1. 实时验证
    • 使用 input 事件监听用户输入
    • 每次输入时检查是否符合正

标签: #jquery #验证 #数字 #小数点后两位