1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import Vue from 'vue'
//input 限制输入正整数以及自定义小数位数
//v-price
//v-price="{digit:小数位数,maxNum:最大值}"
Vue.directive('price', {
inserted: function (el, binding, vnode) {
let dom = null
if (el.tagName == 'INPUT') {
dom = el
} else {
dom = el.querySelector('input')
}
dom.addEventListener('input', function () {
if (binding.value) {
checkValue(dom, binding.value.digit,binding.value.maxNum)
} else {
checkValue(dom, 3, null)
}
})
function checkValue(el, defu, maxNum) {
if (maxNum && el.value > maxNum) {
el.value = maxNum
el.dispatchEvent(new Event("input"));//调用input事件使vue v-model绑定更新
}
let num = new RegExp(`(^[\\-0-9][0-9]*(.[0-9]+)?)$`) // 是否为数字
let reg = new RegExp("^[0-9]*$");//正整数
let littleNum = new RegExp(`^(0|[1-9]\\d{0,${defu}})(\\.\\d{1,${defu}})?$`)//自定义小数位数
if (el.value &&!num.test(+el.value)) {
el.value = el.value.replace(/[^\d.]/g, ""); //清除“数字”和“.”以外的字符
el.dispatchEvent(new Event("input"));//调用input事件使vue v-model绑定更新
}
if (el.value && !littleNum.test(+el.value) && !reg.test(+el.value)) {
el.value = el.value.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
el.value = el.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
el.value = el.value.replace(new RegExp(`^(.*\\..{${defu}}).*$`), "$1");//只能输入自定义个小数
el.dispatchEvent(new Event("input"));//调用input事件使vue v-model绑定更新
}
}
}
})