el-input type='text' 输入非负数或保留一位小数的数字

/^(0|[1-9]\d*)$/匹配非负整数

^ 表示字符串的开始。
0:匹配单个零。
[1-9]\d*:匹配以19开头的数字,后面可以跟任意数量的数字(包括零)。
$ 表示字符串的结束。

/[^0-9]/g匹配任何非数字字符

^ 在方括号内表示取反,意味着匹配不在指定范围内的字符
0-9 表示所有数字字符(从0到9)
g 是一个标志,表示全局匹配,即在整个字符串中查找所有匹配项

/^0+(?!$)/ 匹配以一个或多个零开头的字符串,但不匹配仅包含零的字符串

^ 表示字符串的开始。
0+ 表示一个或多个零。
(?!$) 是一个负向前瞻,表示后面不能是字符串的结束。换句话说,匹配的零后面必须还有其他字符。
    <div id="app">
        <el-form label-width="auto">
            <el-form-item label="非负整数">
                <el-input
                    v-model.trim="value1"
                    @input="handleInput1($event)"
                    clearable
                    style="width: 400px"
                ></el-input
            ></el-form-item>
            <el-form-item label="非负整数或带一位小数">
                <el-input
                    v-model.trim="value2"
                    @input="handleInput2($event)"
                    clearable
                    style="width: 400px"
                ></el-input
            ></el-form-item>
        </el-form>
    </div>
</template>

<script>
export default {
    name: "App",
    data() {
        return {
            value1: "",
            value2: "",
        };
    },
    methods: {
        // 非负数
        handleInput1(event) {
            // 非负整数
            const regex = /^(0|[1-9]\d*)$/;
            if (!regex.test(event)) {
                // 移除非数字字符
                const cleanedValue = event.replace(/[^0-9]/g, "");
                // 移除0开头的0
                const noLeadingZeros = cleanedValue.replace(/^0+(?!$)/, "");
                this.value1 = noLeadingZeros;
            }
        },
        //非负数保留一位小数
        handleInput2(event) {
            const regex = /^\d+(\.\d)?$/;
            //   如果有小数,去除首个零之后的0
            if (!event.includes(".")) {
                event = event.replace(/^0+(?!$)/, "");
            }
            // 先保留输入的有效部分,然后去掉无效部分
            if (regex.test(event)) {
                // 如果输入值合法,直接赋值
                this.value2 = event;
            } else {
                // 如果输入值不合法,移除无效字符
                event = event.replace(/[^0-9.]/g, "");
                console.log("🚀 ~ handleInput ~  event:", event);

                // 限制只有一个小数点
                const parts = event.split(".");
                if (parts.length > 2) {
                    event = parts[0] + "." + parts.slice(1).join("");
                }
                this.value2 = event;
            }
        },
    },
};
</script>

<style>
.el-input {
    width: 400px;
}
</style>
posted @   崛起崛起  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示