<input
v-model="value"
type="text"
onkeyup="value = (value || '').replace(/[^\d\.]/, '')
.replace(/^0{1,}(\d+)/, '$1')
.replace(/^\.{1,}(\d*)/, '$1')
.replace(/^(\d+)\.+(\d*)$/, '$1.$2')
.replace(/^(\d+)\.(\d\d).*$/,'$1.$2')
">
// 匹配最多可以输入两位小数的正整数的正则表达式
const reg = /^((([1-9][0-9]*)|0)\.{1}[0-9]{1,2}$)|(^[1-9][0-9]*$)/
微信小程序中通过@input回调的方式格式化数据时,如果使用v-model的方式双向绑定数据需要使用异步赋值的方式如setTimeout();如果是:value的方式,直接@input中return最终格式化的字符串即可
<input
v-model="value"
@input="changeInput"
type="text">
function changeInput(e) {
let value = e.detail.value
setTimeout(() => {
this.value = (value || '').replace(/[^\d\.]/, '')
.replace(/^0{1,}(\d+)/, '$1')
.replace(/^\.{1,}(\d*)/, '$1')
.replace(/^(\d+)\.+(\d*)$/, '$1.$2')
.replace(/^(\d+)\.(\d\d).*$/,'$1.$2')
})
// :value的方式
// return e.detail.value.replace(/[^\d\.]/, '')
// .replace(/^0{1,}(\d+)/, '$1')
// .replace(/^\.{1,}(\d*)/, '$1')
// .replace(/^(\d+)\.+(\d*)$/, '$1.$2')
// .replace(/^(\d+)\.(\d\d).*$/,'$1.$2')
}