vue 验证输入框只能输入整数以及只能输入整数和小数

前言


不管什么时候做项目都会遇到验证输入框只能输入整数和小数的需求

STEP 一,输入的必须为正整数,不能输入小数点,这个参考的是element-ui的校验

v-model加.number修饰符,在检验规则里设置type为number

     <el-form :model="form" :rules="rules" ref="form">
        <el-form-item prop="positive_integer">
          <el-input
            clearable
            v-model.number="form.positive_integer"
            maxlength="5"
            placeholder="请输入金额"
          ></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="cancel('form')">取 消</el-button>
        <el-button type="primary" @click="update_money('form')">{{
          tip_money_text == 0 ? "充值" : "下一步"
        }}</el-button>
      </div>
export default {
     data() {
           return {
             form: {
                 amount_of_money: "",
                 positive_integer:"",
              },
      rules: {
        amount_of_money: [
          { required: true, message: "请输入金额", trigger: "blur" },
        ],
        positive_integer: [
          { required: true, message: "请输入金额", trigger: "blur" },
          { type: "number", message: "金额必须为整数" },
        ],
      },

             }
          }
}

STEP 二,只能输入整数,小数,但是不能只输入小数点,也不能有两个小数点,只能保留两位小数

这个封装了一个公共得方法,没有用一个正则表达式,因为一开始用了一个正则表达式,但是可以只输入小数点,这样是不满足需求的,所以就封装了一个方法。

这是只用一个正则表达式解决的,适合不是很严格的校验
        <el-input
                v-model="orderQDto"
                @keyup.native="onlyNumber()"
                :placeholder="$t('language.query.min')"
              ></el-input>
  methods: {
    onlyNumber() {
      if (this.orderQDto!= null) {
            this.orderQDto= this.orderQDto.replace(/[^\.\d]/g, "");
      }
    },
}
这是封装的公共得方法,完整的解决了只能输入整数和小数的需求

这个方法是在vue-cli脚手架里边写的,用的是element-ui的框架

公共得index.js

export function onlyNumOnePoint(number_only) {
  //先把非数字的都替换掉,除了数字和小数点
  number_only = number_only.replace(/[^\d.]/g, "");
  //必须保证第一个为数字而不是小数点
  number_only = number_only.replace(/^\./g, "");
  //保证只有出现一个小数点而没有多个小数点
  number_only = number_only.replace(/\.{2,}/g, ".");
  //保证小数点只出现一次,而不能出现两次以上
  number_only = number_only.replace(".","$#$").replace(/\./g, "").replace("$#$", ".");
    //保证只能输入两个小数  
  number_only = number_only.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3');
  return number_only;
}

在需要引入的页面

     <el-input
            clearable
            @keyup.native="onlyNumber()"
            v-model="amount_of_money"
            placeholder="请输入22金额"
          ></el-input>
    import { onlyNumOnePoint} from "@/utils/index";
     methods: {
       onlyNumOnePoint,
       onlyNumber() {
            this.amount_of_money = this.onlyNumOnePoint(this.amount_of_money);
        },
    }

结束语

当然,你的页面中这样的输入框比较多,可以把这个输入框进行二次封装,直接传参使用就可以了,这样也方便统一管理。好了,有什么需要改进的地方,后续会慢慢更新。

  • 13
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 实现Vue输入框只能输入整数的方法有以下几种: 1. 使用正则表达式验证:可以通过在输入框的`input`事件中监听用户输入的内容,并使用正则表达式进行验证。在Vue中可以通过指令`v-model`和`@input`来实现这一功能。代码如下: ```html <template> <div> <input type="text" v-model="inputValue" @input="handleInput"> </div> </template> <script> export default { data() { return { inputValue: '' } }, methods: { handleInput() { this.inputValue = this.inputValue.replace(/\D/g, ''); } } } </script> ``` 在`handleInput`方法中,使用`this.inputValue.replace(/\D/g, '')`将非数字的字符替换为空字符,从而只保留输入框中的数字。 2. 使用自定义指令:Vue中的自定义指令可以方便我们对DOM元素进行操作和控制。代码如下: ```html <template> <div> <input type="text" v-model="inputValue" v-number> </div> </template> <script> export default { data() { return { inputValue: '' } }, directives: { number: { bind(el) { el.handler = function() { el.value = el.value.replace(/\D/g, ''); }; el.addEventListener('input', el.handler); }, unbind(el) { el.removeEventListener('input', el.handler); } } } } </script> ``` 在自定义指令`number`的`bind`方法中,定义了一个事件处理函数`el.handler`,处理函数将非数字的字符替换为空字符。然后通过`addEventListener`将事件绑定到输入框的`input`事件上,从而实现只能输入整数的效果。在`unbind`方法中,解绑了事件防止内存泄漏。 无论是使用正则表达式验证还是自定义指令,在输入框输入非数字的字符就会被过滤,只保留整数。 ### 回答2: Vue中的输入框默认是可以输入任意字符的,包括整数小数和其他特殊字符。但是我们可以通过限制输入的字符类型,使输入框只能输入整数。 一种常用的方法是使用Vue的指令,通过监听输入框输入事件,检测输入的字符是否为整数。如果不是整数,则阻止字符的输入。 在Vue模板中,我们可以这样定义一个输入框: ``` <input v-model="num" v-on:input="checkInt" type="text"> ``` 在Vue实例中,我们可以定义checkInt方法来检测输入的字符是否为整数: ``` data() { return { num: '' } }, methods: { checkInt() { // 使用正则表达式检查输入的字符是否为整数 this.num = this.num.replace(/\D/g, ''); } } ``` 在checkInt方法中,我们使用了正则表达式`\D`来匹配非数字字符,然后使用replace方法将非数字字符替换为空字符串,从而只保留整数部分。 通过这样的设置,我们就可以实现只能输入整数输入框了。当用户输入一个非数字字符时,它会在输入框中被直接删除。注意,这种方法只是在用户输入的时候进行限制,如果通过其他方式改变输入框的值(比如通过代码动态设置输入框的值),这些限制就不会生效了。 ### 回答3: 在Vue中,可以通过一些方法实现只允许输入整数输入框。以下是一种可能的解决方案: 1. 使用Vue的v-model指令绑定输入框的值,例如:v-model="inputValue"。 2. 在Vue的data选项中定义inputValue变量,用于保存输入框的值。 3. 使用Vue的watch选项来监测inputValue的变化,当其发生变化时执行相应的操作。 4. 在watch选项中,使用正则表达式来判断inputValue是否为整数,如果不是整数,则将其设置为最近一次的有效整数输入值。 5. 在输入框的模板中,可以加入input事件监听函数,当输入框的值发生变化时,触发该函数。 6. 在input事件监听函数中,可以使用JavaScript的isNaN()函数来判断输入的值是否为数字,如果不是数字,则设置输入框的值为最近一次的有效整数输入值。 上述方法的实现思路是通过监测输入框的值的变化,当输入框的值不符合要求时,将其重置为最近一次的有效整数输入值。这样就可以保证输入框只能输入整数。注意,这只是一种解决方案,并不是唯一的方法。根据具体需求,也可以采用其他方式实现限制输入整数的功能。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值