如何让以下自定义指令支持正负浮点数?

vue2项目封装了指令,输入框只能输入正浮点数,现在需要在此代码基础上修改下,支持输入正浮点数和负浮点数。

源码如下:

export default {

bind(el, binding, vnode) {

const input =

el.querySelector(".el-input__inner") ||

el.querySelector(".el-textarea__inner") ||

el;

input.addEventListener("compositionstart", () => {

vnode.locking = true; // 解决中文输入双向绑定失效

});

input.addEventListener("compositionend", () => {

vnode.locking = false; // 解决中文输入双向绑定失效

input.dispatchEvent(new Event("input"));

});

// 输入监听处理

input.onkeyup = () => {

if (vnode.locking) {

return;

}

// v-input.float

if (binding.modifiers.float) {

// 只能输入浮点型(只能一个小数点)

onlyFloat(input, binding.value);

}

input.dispatchEvent(new Event("input"));

};

// 浮点数

function onlyFloat(input, n) {

let value = input.value;

value = value.replace(/[^\d.]/g, "");

value = value.replace(/^\./g, "");

value = value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");

if (n && Number(n) > 0) {

// 限制n位

var d = new Array(Number(n)).fill("\\d").join("");

var reg = new RegExp(`^(\\-)*(\\d+)\\.(${d}).*$`, "ig");

value = value.replace(reg, "$1$2.$3");

}

if (value && !value.includes(".")) {

value = Number(value).toString(); // 去掉开头多个0

}

input.value = value;

}

}

}


回答:

function onlyFloat(input, decimalPlaces) {

let val = input.value;

if (val.startsWith('-')) {

val = '-' + val.slice(1).replace(/-/g, '');

}

val = val.replace(/^\./g, '0.').replace(/\.{2,}/g, '.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.');

if (decimalPlaces !== undefined && !isNaN(decimalPlaces)) {

const parts = val.split('.');

if (parts[1] && parts[1].length > decimalPlaces) {

parts[1] = parts[1].substring(0, decimalPlaces);

val = parts.join('.');

}

}

val = val.replace(/[^\d.-]/g, '');

val = val.replace(/^(-?)0+([1-9])/, '$1$2').replace(/^(-?)0+\./, '$10.');

input.value = val;

}

以上是 如何让以下自定义指令支持正负浮点数? 的全部内容, 来源链接: utcz.com/p/934787.html

回到顶部