输入框只能输入正确的金额

页面代码

<input type="text" id="ipt1" />

js代码           

$("#ipt1").keyup(function () {
    var reg = $(this).val().match(/\d+\.?\d{0,2}/),
        txt = '';
    if (reg != null) {
        txt = reg[0];
    }
    $(this).val(txt);
}).change(function () {
    $(this).keypress();
    var v = $(this).val();
    if (/\.$/.test(v)){
        $(this).val(v.substr(0, v.length - 1));
    }
});

 

前端使用 JavaScript 实现只能输入数字和点的金额输入框,有多种实现方式,以下为几种常见方法: ### 实时过滤小数点及限制小数位数 当输入超过 1 个小数点时,只保留第一个小数点,还可进一步限制小数位数。此方法处理了输入时的实时过滤,但提交前仍建议做最终验证,对于金额输入,建议配合 Big.js 等库处理精度问题,移动端使用时,可设置 `inputmode="decimal"` 优化键盘体验。 ```javascript // 示例代码,假设 input输入框元素 const input = document.getElementById('yourInputId'); input.addEventListener('input', function() { let newVal = this.value; // 如果超过1个,只保留第一个小数点 if ((newVal.match(/\./g) || []).length > 1) { newVal = newVal.replace(/\.(?=.*\.)/g, ''); } // 限制小数位数为2位 const decimalCount = (newVal.match(/\./g) || []).length; if (decimalCount === 1) { const parts = newVal.split('.'); if (parts[1].length > 2) { newVal = parts[0] + '.' + parts[1].substring(0, 2); } } this.value = newVal; }); ``` ### jQuery 实现输入框限制 使用 jQuery 实现限制数字输入框,可对输入进行实时过滤,支持是否允许输入小数点的设置。 ```javascript // 假设 _this 为 jQuery 选择器选中的输入框元素 function numberInp(_this, flag = false) { if (!isPC()) { _this.bind("input propertychange", function (event) { var inputValue = $(this).val(); if (flag) { $(this).val(inputValue.match(/^\d*(\d{0,2})/g) ? inputValue.match(/^\d*(\d{0,2})/g)[0] : null); } else { $(this).val(inputValue.match(/^\d+(\.?\d{0,2})/g) ? inputValue.match(/^\d+(\.?\d{0,2})/g)[0] : null); } }); } else { _this.on('input', function(event) { var inputValue = $(this).val(); if (flag) { $(this).val(inputValue.match(/^\d*(\d{0,2})/g) ? inputValue.match(/^\d*(\d{0,2})/g)[0] : null); } else { $(this).val(inputValue.match(/^\d+(\.?\d{0,2})/g) ? inputValue.match(/^\d+(\.?\d{0,2})/g)[0] : null); } }); } } // 使用示例 numberInp($('#yourInputId')); ``` ### Vue 项目中实现 在 Vue 项目(如 uniapp)中,可以通过 `@input` 事件结合正则表达式来实现只能输入小数点后两位数字的金额输入框。 ```vue <template> <u-field v-model="cash" @input="inputChange" type="number" label="提现金额" placeholder="最多可提现一亿元"> </template> <script> export default { data() { return { cash: '' }; }, methods: { inputChange(value) { if(value) { var price = value.toString().match(/\d+\.\d{2}/); this.$nextTick(() => { this.cash = price && price[0]; }); } } } }; </script> ``` ### Vant 金额输入框 在 Vant 组件库中,可以通过自定义组件的方式实现金额输入框。在 `components` 中新建文件夹 `currency`,新建 `index.js` 文件。 ```javascript // index.js import Currency from './src/currency.vue'; Currency.install = function (Vue) { Vue.component(Currency.name, Currency); }; export default Currency; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值