找回密码
 立即注册
查看: 462|回复: 0

[其它] Element - ui :el-input 输入只能是数字并且小数点后只能是1-2位

[复制链接]

224

主题

0

回帖

773

积分

高级会员

积分
773
发表于 2024-6-16 11:52:18 | 显示全部楼层 |阅读模式
本帖最后由 御坂主机 于 2024-6-16 20:35 编辑

1. 简介

在前端开发中,用户输入的格式和内容验证是一个常见需求。在使用Element UI框架时,我们可以通过自定义组件和事件处理来实现el-input输入框仅允许数字输入,并且限制小数点后的位数为1-2位。本文将详细介绍如何实现这一功能。

1.1 Element UI简介

Element UI是一款基于Vue.js的前端UI框架,提供了丰富的组件库,方便开发者快速构建美观、易用的用户界面。el-input是Element UI中用于获取用户输入的基础组件。

2. 实现思路

为了实现el-input输入框仅允许数字输入,并限制小数点后的位数为1-2位,可以通过以下步骤完成:

(1) 使用el-input组件创建输入框。
(2) 监听输入事件,实时验证输入内容。
(3) 使用正则表达式过滤不符合要求的输入内容。

3. 具体实现步骤

3.1 创建el-input输入框

首先,创建一个基本的el-input输入框,并绑定一个Vue数据属性来存储输入内容。

  1. <template>
  2.   <div>
  3.     <el-input v-model="inputValue" @input="validateInput"></el-input>
  4.   </div>
  5. </template>

  6. <script>
  7. export default {
  8.   data() {
  9.     return {
  10.       inputValue: ''
  11.     };
  12.   },
  13.   methods: {
  14.     validateInput() {
  15.       // 验证逻辑将在此实现
  16.     }
  17.   }
  18. };
  19. </script>
复制代码


3.2 监听输入事件并验证内容

在validateInput方法中,使用正则表达式来验证输入内容,只允许数字和小数点输入,并限制小数点后的位数为1-2位。

  1. <script>
  2. export default {
  3.   data() {
  4.     return {
  5.       inputValue: ''
  6.     };
  7.   },
  8.   methods: {
  9.     validateInput() {
  10.       // 定义正则表达式,匹配整数或带有1-2位小数的数字
  11.       const regex = /^[0-9]+(\.[0-9]{1,2})?$/;
  12.       if (!regex.test(this.inputValue)) {
  13.         // 如果输入内容不符合正则表达式,则移除最后一个字符
  14.         this.inputValue = this.inputValue.slice(0, -1);
  15.       }
  16.     }
  17.   }
  18. };
  19. </script>
复制代码


3.3 防止非数字字符输入

为了增强用户体验,可以在输入事件中使用事件对象来阻止非数字字符的输入。修改el-input组件,添加keydown事件处理函数。

  1. <template>
  2.   <div>
  3.     <el-input v-model="inputValue" @input="validateInput" @keydown="preventNonNumeric"></el-input>
  4.   </div>
  5. </template>

  6. <script>
  7. export default {
  8.   data() {
  9.     return {
  10.       inputValue: ''
  11.     };
  12.   },
  13.   methods: {
  14.     validateInput() {
  15.       const regex = /^[0-9]+(\.[0-9]{1,2})?$/;
  16.       if (!regex.test(this.inputValue)) {
  17.         this.inputValue = this.inputValue.slice(0, -1);
  18.       }
  19.     },
  20.     preventNonNumeric(event) {
  21.       // 允许的按键:数字键、退格键、删除键、左右箭头、小数点
  22.       const allowedKeys = ['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', '.'];
  23.       if (!allowedKeys.includes(event.key) && !/^[0-9]$/.test(event.key)) {
  24.         event.preventDefault();
  25.       }
  26.     }
  27.   }
  28. };
  29. </script>
复制代码


4. 优化体验

为了进一步优化用户体验,可以在失去焦点时(blur事件)验证输入内容,并在必要时修正格式。例如,如果用户输入了"123.",可以自动修正为"123.0"。

  1. <template>
  2.   <div>
  3.     <el-input v-model="inputValue" @input="validateInput" @keydown="preventNonNumeric" @blur="formatInput"></el-input>
  4.   </div>
  5. </template>

  6. <script>
  7. export default {
  8.   data() {
  9.     return {
  10.       inputValue: ''
  11.     };
  12.   },
  13.   methods: {
  14.     validateInput() {
  15.       const regex = /^[0-9]+(\.[0-9]{1,2})?$/;
  16.       if (!regex.test(this.inputValue)) {
  17.         this.inputValue = this.inputValue.slice(0, -1);
  18.       }
  19.     },
  20.     preventNonNumeric(event) {
  21.       const allowedKeys = ['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', '.'];
  22.       if (!allowedKeys.includes(event.key) && !/^[0-9]$/.test(event.key)) {
  23.         event.preventDefault();
  24.       }
  25.     },
  26.     formatInput() {
  27.       if (this.inputValue.endsWith('.')) {
  28.         this.inputValue += '0';
  29.       }
  30.     }
  31.   }
  32. };
  33. </script>
复制代码


5. 总结

通过自定义事件处理和正则表达式验证,可以有效地限制el-input输入框的内容仅为数字,并且小数点后最多两位。本文提供的方法可以确保输入内容的有效性和一致性,从而提高用户体验和数据处理的可靠性。希望本文对你在使用Element UI开发时有所帮助。





------------------------------------------------------------------------------------------------------------------------------------------

========  御 坂 主 机  ========

>> VPS主机 服务器 前沿资讯 行业发布 技术杂谈 <<

>> 推广/合作/找我玩  TG号 : @Misaka_Offical <<

-------------------------------------------------------------------------------------------------------------------------------------------

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系站长|Archiver|手机版|小黑屋|主机论坛

GMT+8, 2025-4-4 21:48 , Processed in 0.073354 second(s), 24 queries .

Powered by 主机论坛 HostSsss.Com

HostSsss.Com

快速回复 返回顶部 返回列表