js输入框字符宽度判断-已知字符串宽度/未知字符串宽度

参考文章
一、需求说明
一串字符长度很好判断,this.text.length就拿到了,但是对于一个固定宽度的文本框,要求不能超过宽度,那么就要计算这行文本的宽度。汉字是等宽字符,但是数字和英文则宽度不一致,这里的建议是,以数字为单位,比如1,那么一行最多输入20的汉子,长度则为20,字母则要按照最宽的字符w去计算,数字则以5为单位去计算。

二、解决方案
情形一:已知的字符串宽度,根据要求截取固定宽度的字符串,比如我已经知道了一串字符串了,去截取固定的宽度
方法一:

String.prototype.visualLength = function(size,family)
      {
    var ruler = $("#ruler").css({
    “font-size”:size || “inherit”,
  “font-family”:family || “inherit”
     });
  ruler.text(this);
  return ruler.width();
      }

方法二:

var canvas = document.createElement(‘canvas’)//首先创建一个canvas标签
var ctx = canvas.getContext(“2d”) as CanvasRenderingContext2D;//把canvas的画笔给调出来
ctx.font=“26px 思源黑体”;//设置字体大小和字体,这一步很重要,直接影响了测量结果,因为14px和16px的字体的宽度是不一样的
var width = ctx.measureText(this.name).width;//开始测量字体的宽度
情形二:未知字符串的宽度,根据动态输入的字符判断当前的宽度,根据输入框宽度截取能显示的最多字符长度,比如一个输入框固定了长度,每输入一个字符后则判断是否超过,超过后就截去超过的部分
按照比例,汉字宽度为1,则英文为0.89,数字为0.57,符号(比如=?)

    @Watch('backText')
    sendText(){
      let count=0;
      let maxLen:any
      for (let index = 0; index < this.backText.length; index++) {
        let value=this.backText[index];
        if (value.match(/[A-Z]/g) || value.match(/[\u4e00-\u9fa5]/g)) {//大写英文/中文
          count+=1;
        }else if (value.match(/[a-z]/g)) {//小写英文
          count+=0.62;
        }else if (value.match(/[0-9]/g)||value.match(/[%&',;=?~$\x22]/g)) {//数字/符号
          count+=0.54;
        }else if (value.match(/[(^\s*)|(\s*$)]/g)) {//空格
          count+=0.2;
        }
        if (count>19) {
          maxLen=index;
          this.backText=this.backText.substring(0,index);
          alert(`亲,内容已输满了哦~`;  
          return;
        }
        
      }
    }

欢迎转载,转载需带着文章出处链接~~

### 回答1: 以下是Python代码,用于实现上述规则: ``` s = [2, 0, 2, 0, 0, 5, 2, 3] for num in s: if num > 0: print('@' * num) else: print('@') ``` 运行结果如下: ``` @@ @ @@ @ @ @@@@@ @@ @@@ ``` 解释:对于列表中的每个元素,如果它的值大于0,则生成对应个数的字符@,如果是0则生成1个字符@。以上代码使用了循环语句来遍历整个列表,并使用条件语句来判断每个元素的值。最后输出结果。 ### 回答2: 以下是满足规则的程序: ```python s = [2, 0, 2, 0, 0, 5, 2, 3] for num in s: if num > 0: print('@' * num) else: print('@') ``` 程序首先定义了给定列表`s`。然后,通过遍历列表中的每个元素,检查该元素的值。如果元素大于0,则生成对应个数的字符`@`,并打印输出。如果元素等于0,则生成一个字符`@`,并打印输出。 根据给定的`s`列表,程序的输出如下: ``` @@ @ @@ @ @ @@@@@ @@ @@@ ``` 备注:可能由于输入框的限制,有些字符可能被省略。如果需要完整的输出,可以尝试在其他Python编译器或编辑器中运行程序。 ### 回答3: 以下是编写的程序: ```python s = [2, 0, 2, 0, 0, 5, 2, 3] result = "" for item in s: if item > 0: result += "@" * item else: result += "@" print(result) ``` 程序中,首先定义了列表 s,并初始化一个空字符串 result。然后使用 for 循环遍历列表 s 中的每一个元素。对于每个元素,如果大于 0,则生成相应个数的字符 "@" 并添加到 result 中;否则,直接添加一个字符 "@" 到 result 中。最后,打印出 result。 执行程序后,输出结果为:@@@
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值