• vue 输入框中英文限制次数


    以英文限制在10个,中文限制在五个为例

         <input ref="ipt"
            class="inputtext"
            v-model="item.name"
            @input="ChangeWith"
          />
    methods:{
        //输入框字数限制
        ChangeWith() {
          let leng = this.validateTextLength(this.item.name);
          if (leng >= 5) {
            this.$refs.ipt.maxLength = leng;
          } else {
            this.$refs.ipt.maxLength = 10;
          }
        },
        validateTextLength(value) {
          // 中文、中文标点、全角字符按1长度,英文、英文符号、数字按0.5长度计算
          let cnReg = /([u4e00-u9fa5]|[u3000-u303F]|[uFF00-uFF60])/g;
          let mat = value.match(cnReg);
          let length;
          if (mat) {
            length = mat.length + (value.length - mat.length) * 0.5;
            return length;
          } else {
            return value.length * 0.5;
          }
        },
    }

     然后发现这个方法存在漏洞,就是单个只输入英文或者中文它的判断是对的,但是中英文混合就不行了,然后我加了改善,

        //输入框字数限制
        ChangeWidth: function() {
          let namelen = this.validateTextLength(this.item.name);
          if (namelen > 5) {
            let newnameindex = 0;
            let i = 0;
            let cnReg = /([u4e00-u9fa5]|[u3000-u303F]|[uFF00-uFF60])/;
            for (i = 0; i < this.item.name.length; i++) {
              let mat = this.item.name[i].match(cnReg);
              newnameindex = newnameindex + (mat ? 1 : 0.5);
              if (newnameindex >= 5) {
                break;
              }
            }
            this.$refs.ipt.maxLength = i + 1;
            // this.item.name = this.item.name.substring(0,i + 1 );等同于上面的maxLength
          }
          this.item.width = this.textWidth(this.item.name) + 42;
          if (this.item.width < 65) {
            this.item.width = 65;
          }
        },
        validateTextLength(value) {
          // 中文、中文标点、全角字符按1长度,英文、英文符号、数字按0.5长度计算
          let cnReg = /([u4e00-u9fa5]|[u3000-u303F]|[uFF00-uFF60])/g;
          let mat = value.match(cnReg);
          let length;
          if (mat) {
            length = mat.length + (value.length - mat.length) * 0.5;
            return length;
          } else {
            return value.length * 0.5;
          }
        },

    然后就完美了,中英文结合也没有毛病。

  • 相关阅读:
    手机端布局
    雪碧图优缺点
    es6的基本数据详解
    react生命周期函数
    第七周作业-使用Python实现抽样分布的验证(正态分布、卡方分布、T分布等)
    第六章统计量及其抽样分布
    Python实现概率分布(二项分布、伯努利分布、泊松分布、几何分布、正态分布等)
    4.概率与概率分布
    3.描述性统计
    统计学小组
  • 原文地址:https://www.cnblogs.com/lovebear123/p/12063411.html
Copyright © 2020-2023  润新知