el-input type='text' 输入非负数或保留一位小数的数字
/^(0|[1-9]\d*)$/
匹配非负整数
^ 表示字符串的开始。
0:匹配单个零。
[1-9]\d*:匹配以1到9开头的数字,后面可以跟任意数量的数字(包括零)。
$ 表示字符串的结束。
/[^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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通