在 UniApp 中,实现输入带逗号的金额(如 1,234.56)可以通过以下步骤完成:
- 使用
input 组件:监听用户输入,并实时格式化。
- 格式化逻辑:去除非数字字符(逗号和小数点除外),插入千位分隔符,并限制小数位数。
- 处理光标位置:格式化后保持光标在正确位置。
示例代码
<template>
<view>
<input
type="text"
v-model="displayValue"
@input="onInput"
@focus="onFocus"
@blur="onBlur"
placeholder="输入金额"
/>
</view>
</template>
<script>
export default {
data() {
return {
displayValue: '', // 显示带逗号的字符串
actualValue: '', // 实际数值(无逗号)
};
},
methods: {
onInput(e) {
let value = e.detail.value;
// 移除非数字、小数点(保留第一个小数点)
value = value.replace(/[^\d.]/g, '').replace(/(\..*)\./g, '$1');
// 分割整数和小数部分
let parts = value.split('.');
let integerPart = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
let decimalPart = parts[1] ? '.' + parts[1].substring(0, 2) : ''; // 限制2位小数
this.actualValue = parts[0] + (parts[1] ? '.' + parts[1] : '');
this.displayValue = integerPart + decimalPart;
},
onFocus() {
// 聚焦时移除逗号以便编辑
this.displayValue = this.actualValue;
},
onBlur() {
// 失焦时重新格式化显示
this.onInput({ detail: { value: this.actualValue } });
}
}
};
</script>
说明:
- 输入时:过滤非法字符,添加千位分隔符,并限制小数位数为2位。
- 聚焦时:移除逗号方便用户编辑。
- 失焦时:重新格式化显示带逗号的金额。
注意事项:
- 实际存储或提交时使用
actualValue(无逗号数字字符串)。
- 可根据需求调整小数位数限制或分隔符样式。
这样即可在 UniApp 中实现带逗号金额的输入和显示。