美文网首页
input 输入校验

input 输入校验

作者: xiari1991 | 来源:发表于2020-06-19 20:38 被阅读0次

方式一:通过添加@input事件

inputValid.js

/**
 * 用法 <input @input="$inputValid.validInputIsMatchNaturalNum($event, 5)">
 * */


/**
 * 绑定到@input事件,过滤输入,只能是小数。
 * event: 事件对象
 * decimalDigits: 可以输入的最大小数位数
 * decimalDigits: 可以输入的最大长度
 * */
function validInputIsMatchDecimal(event, decimalDigits, maxLength) {
  var oriText =   event.target.value;
  event.target.value = validStrIsMatchDecimal(event.target.value, decimalDigits);
  if (maxLength != null && maxLength > 0) {
    event.target.value = event.target.value.slice(0, maxLength)
  }
   if (oriText != event.target.value) {
      input.dispatchEvent(new Event("input"))
   }
}

function validStrIsMatchDecimal(value, decimalDigits) {
    if(decimalDigits == 2){
        value = value.replace(/[^\d.]/g,""); //清除"数字"和"."以外的字符
    } else {
        value = value.replace(/[^\d]/g,""); //清除"数字"和"."以外的字符
    }

    value = value.replace(/^\./g,""); //验证第一个字符是数字
    value = value.replace(/\.{2,}/g,"."); //只保留第一个, 清除多余的
    value = value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
    if (decimalDigits != 0) {
        var regStr = '\^(\\-)*(\\d+)\\.(\\d' + '{' + decimalDigits + '})' + '.*$';
        var reg = new RegExp(regStr, 'gi');
        value = value.replace(reg, '$1$2.$3');
    }
    //防止输入01
    if (value.indexOf(".") < 0 && value != "") {
        value = parseInt(value);
    }
    return value;
}

/**
 * 绑定到@input事件,过滤输入,只能是自然数。
 * maxLength:长度
 * */
function validInputIsMatchNaturalNum(event, maxLength) {
  var input = event.target;
  var oriText = input.value;
  input.value = input.value.replace(/[^\d]/g,""); //清除"数字"以外的字符
  //防止输入01
  if (input.value != "") {
    input.value = parseInt(input.value);
  }
  if (maxLength != null && maxLength > 0) {
    input.value = input.value.slice(0, maxLength)
  }
  if (oriText != input.value) {
    input.dispatchEvent(new Event("input"))
  }
}

function  isPureFloat(text) {
    var reg = new RegExp("(^[0]\\.[0-9]*$)|(^[1-9]{1}(\\d*)\\.[0-9]*$)|(^[1-9]{1}(\\d*)$)|(^0$)");
    var result = reg.test(text);
    return result;
}


export const inputValid = {
  validInputIsMatchNaturalNum: validInputIsMatchNaturalNum,
  validInputIsMatchDecimal: validInputIsMatchDecimal
}

使用方式
1、在main.js中,将inputValid绑定到Vue全局属性中

import { inputValid} from "./util/inputValid";
Vue.prototype.$inputValid = inputValid;

2、在input组件中使用

 <input @input="$inputValid.validInputIsMatchNaturalNum($event, 5)">

这里解释下,为什么要写

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

因为v-model绑定的对象是监听了input事件。我们监听input事件,对target.value作出的修改不会对v-model绑定的对象做出想改

方式二:通过添加指令

inputValid.js

import Vue from 'vue'


Vue.directive('input-number-0', {
  bind(el, binding, vnode) {
    var flag = true;
    const target = el instanceof HTMLInputElement ? el : el.querySelector("input");
    target.addEventListener("input", event => {

      var input = event.target;
      var oriText = input.value;
      input.value = input.value.replace(/[^\d]/g,""); //清除"数字"以外的字符
      //防止输入01
      if (input.value != "") {
        input.value = parseInt(input.value);
      }
      if (maxLength != null && maxLength > 0) {
        input.value = input.value.slice(0, maxLength)
      }
      if (oriText != input.value) {
        //手动修改v-model值
        input.dispatchEvent(new Event("input")) 
      }
    })
  }
})


使用方式
1、在main.js中引入

import {} from "./util/inputValid"

2、在input中添加指令v-input-number-0

 <input v-input-number-0 v-model="popData.num"/>

相关文章

  • input 输入校验

    方式一:通过添加@input事件 inputValid.js 使用方式1、在main.js中,将inputVali...

  • js中如何判断input框输入是否是纯数字

    一个input 框可能输入任何类型,那如何校验是输入的纯数字呢?

  • input[type=number]校验问题

    input[type=number]输入校验,默认只能支持0-9的整数校验。如果遇到浮点数的时候,校验就会返回fa...

  • emoji表情 检验

    主要是为了在移动端输入框(input、textarea)输入emoji表情时,做校验。移动端直接输入emoji表情...

  • input框校验

    input框校验 1.不能输入空白的东西,比如:空格、回车键、 onkeyup="this.value=this....

  • input 输入框数字校验

    问题:h5 input 输入框 type=number 时,输入 1.2. 最后一个小数点不会触发 onChang...

  • 测试自我要求

    客户端校验 1. input输入测试 使用maxlength属性初步限制长度 正则判定数字字母等输入的格式和长度 ...

  • input校验-只允许输入数字,不能输入小数

    rules: { validateItem: [ { required: true, ...

  • JS防抖和节流

    在处理高频事件,类似于window的resize或者scorll,或者input输入校验等操作时。如果直接执行事件...

  • input校验

    jquery.validate多个相同name属性input只验证第一个的问题 input具有相同name值,用v...

网友评论

      本文标题:input 输入校验

      本文链接:https://www.haomeiwen.com/subject/ppvbxktx.html