简单的
'22a@22.33#ewe33.44asa44'.replace(/[^\d\.]/g,'')
结果:"2222.3333.4444"
评论:不满意
复杂的&完整的
'22a@22.33#ewe33.44asa44'.replace(/[^\d\.]/g,'')
.replace(".","$#$")
.replace(/\./g,"")
.replace("$#$",".");
结果:"2222.33334444"
评论:满意,符合要求
适用于input框过滤(vue element-ui)
<template>
<el-input
v-model="elInput"
clearable
placeholder=" "
@input="input"
/>
</template>
<script>
export default {
data(){
return{
elInput:''
}
},
methods:{
input(value) {// 普通版本-金额输入框
this.elInput = value.match(/\d+\.?\d*/)
// this.elInput = value.match(/-?\d+\.?\d*/) // 兼容负数
},
input(value) { // 千分位版本-金额输入框
value = value.split(',').join('')
this.elInput = this.thousands(value.match(/\d+\.?\d*/))
// this.elInput = value.match(/-?\d+\.?\d*/) // 兼容负数
},
thousands(num) { // 处理千分位
return (num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
},
}
}
</script>
结果:-- 怎么输看见的都是浮点数,嘿嘿!--
评论:满意,符合要求,输入的时候 非数字的字符输不进去,多余的小数点也输入不进去,非常适合input金额框
金额输入框完美版(vue element-ui)
<template>
<el-input
v-model=""
clearable
placeholder=" "
@keyup.native="handleKeyup"
/>
</template>
<script>
export function handleKeyup(event, negative = true) {
/* if (event.target.value.indexOf('.') < 0) {
// 如果没有小数点的情况,输入了小数点,长度变为20
if (event.key === '.') {
event.target.value += '.'
this.maxlength = 20
} else {
this.maxlength = 17
}
this.maxlength = 17
} else {
this.maxlength = 20
}*/
const selectionStart = event.target.selectionStart
const selectionEnd = event.target.selectionEnd
event.target.value = event.target.value.replace(/[^\-\d.,]/g, '')
// eslint-disable-next-line no-useless-escape
event.target.value = event.target.value.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3') // 只能输入两个小数
if (event.target.value.indexOf('.') < 0 && event.target.value !== '') {
// 以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额
if (event.target.value.substr(0, 1) === '0' && event.target.value.length === 2) {
event.target.value = event.target.value.substr(1, event.target.value.length)
}
}
const oldLength = event.target.value.length
let payAmount = event.target.value
// negative boolean 判断是否为负数
const regexp = negative ? /[^\-\d^\\.]+/g : /[^\d^\\.]+/g
payAmount = payAmount.replace(regexp, '')
payAmount = payAmount.replace(/,/g, '')
if (negative && payAmount.slice(0, 1) === '-') {
payAmount = '-' + payAmount.replace(/-/g, '')
} else {
payAmount = payAmount.replace(/-/g, '')
}
if (payAmount.indexOf('.') !== -1) {
if (payAmount.split('.')[1].length > 1) {
payAmount = payAmount.substring(0, payAmount.indexOf('.') + 3)
}
}
payAmount = String(payAmount).replace(/(?=\B(?:\d{3})+\b)(\d{3}(\.\d+$)?)/g, ',$1')
event.target.value = payAmount
if (event.key === '.') {
return false
}
const nowLength = event.target.value.length
event.target.selectionStart = selectionStart + (nowLength - oldLength)
event.target.selectionEnd = selectionEnd + (nowLength - oldLength)
}
</script>