欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

限制输入框30个字符/字节或15个汉字

程序员文章站 2022-03-07 21:12:31
就拿限制输入框30个字符15个汉字为例吧,当然灵活使用,方法封装好,你也可以20个字符10个汉字等等。js的方法,slice, substr等截取字符串的方法,全部都是以长度截取的,做不到按字节截取。如,input 自带的maxlength也是以长度限制。但是有时的需求需要我们按照字节限制输入框。如输入框只能输入30个字符,大于30时,则把超出的值替换为空。一个汉字=2字节=2字符一个字母、数字=1字节=1字符首先会用到两个知识点。正则与js方法正则:/[\x00-\xff]/表示匹配单字...

就拿限制输入框30个字符15个汉字为例吧,当然灵活使用,方法封装好,你也可以20个字符10个汉字等等根据传参决定。
结合网上思路。整理一波。
js的方法,slice, substring等截取字符串的方法,全部都是以长度截取的,做不到按字节截取。如,input 自带的maxlength也是以长度限制。
但是有时的需求需要我们按照字节限制输入框。如输入框只能输入30个字符,大于30时,则把超出的值替换为空。

一个汉字=2字节=2字符
一个字母、数字=1字节=1字符
首先会用到两个知识点。正则与js方法
正则:

/[\x00-\xff]/

表示匹配单字节的字符,如汉字和…等号等。单字节字符:字母与数字。
charAt()//返回指定位置的字符的下标。

js函数部分:

//1参数:输入的值  2参数:要限制输入的字符个数
export const limitstr = (strval,strnum)=>{
let re = "";
let strleng = strval.length;
//返回字符串的总字节数
let byteleng = strval.replace(/[^\x00-\xff]/g,'**').length;
if(byteleng<=strnum)return strval;
for(var i=0,bytenum=0;i<strleng;i++){
  var byte = strval.charAt(i);
  if(/[\x00-\xff]/.test(byte)){
   bytenum++;//单字节字符累加1
  }else{
   bytenum+=2;//非单字节字符累加2
  }
  if(bytenum<=strnum){re+=byte}else{return re}
 }
}

调用部分:首先引入limitstr函数

<template>
  <div>
    <input type="text" v-model="name" @blur="b">
  </div>
</template>
<script>
export default {
  methods:{
    data(){
     return{name:""}
    }
    b(){
      this.name = this.$limitstr(this.name,30)
    }
  }
}
</script>

结果:
限制输入框30个字符/字节或15个汉字
不管输入多少汉字,字母数字,最终的input框内只存入30个字符。则多输入部分替换为空。
至于,replace方法的正则使用。下次单拿出来详讲。
觉得还不错的,给个支持与关注~~~~,将会是我继续更新的动力。

------努力努力再努力。

本文地址:https://blog.csdn.net/weixin_47679798/article/details/111878537