js的字符计算问题

项目中常常会遇到字数统计计算问题,多行文本限制最大长度问题。
最常见的计算方法是:中文字符算两个字,英文字符算一个字,不过也有一些特殊的需求。
在做字符计算的过程中,少不了正则,那就先来看一下常用的正则

正则的语法:

在这里我就写一些我待会要用到的

  • “+”号,表示出现一次或多次:
    例:/ab+c/,可以匹配abc,abbc,abbbbbc,abbbbbbbbbbbbbbc
    “*”号代表字符可以不出现,可以出现一次或多次:
    例:/abc*d/,可以匹配abd,abcd,abcccccd
    “?”号,表示可以出现一次或0次
    例:/abc?d/,可以匹配abd,abcd
    

  • 具体其他符号的用法可以参考:

http://www.runoob.com/regexp/regexp-syntax.html
http://www.cnblogs.com/zxin/archive/2013/01/26/2877765.html


好了我们来看一下计算时会用到的方法吧

JS 中正则表达式的使用方式有两种:

  • 正则表达式对象
  1. exec(str) : 检索字符串中指定的值。返回找到的值,并确定其位置
  2. test(str) : 检索字符串中指定的值。返回 true 或 false
  • 字符串对象的方法
    1,match(regexp) : 找到一个或多个正则表达式的匹配
    2,replace(regexp) : 替换与正则表达式匹配的子串
    3,search(regexp) : 检索与正则表达式相匹配的值
    4,split(search) : 把字符串分割为字符串数组
    5,$.trim(str):去掉前后空格

直接来看例子吧

  • 直接输入的话:
    每一个字符都算做一个字

    js的字符计算问题_第1张图片
    )ZHEF4G`O_0UZ3~}LMUB8ND.png

  • 如果是汉字算两个字,其他字符算一个字的话:
    javascript原生

  •  function ruleOne(value) {
      var chinese=0;
      if(value.match(/[\u4e00-\u9fa5]/g)!=null){
          chinese = value.match(/[\u4e00-\u9fa5]/g).length;
      }
      var valueLength = chinese+value.length;
      return valueLength;
    }
    function oneValue() {
      showText.innerHTML = inputText.value;
      var valueLengthOne=ruleOne(inputText.value);
      spanOne.innerHTML = '已经输入 ' + valueLengthOne + ' 个字'
    }
    
js的字符计算问题_第2张图片
)RC9A~NLEWW~{{BW(WX32W2.png
  • 只是计算汉字(算2个字),数字,英文,不计算特殊字符
  • function ruleOne(value) {
      var chinese=0;
      var english=0;
      if(value.match(/[\u4e00-\u9fa5]/g)!=null){
          chinese = value.match(/[\u4e00-\u9fa5]/g).length;
      }
     if(value.match(/[a-zA-z0-9]/g)!=null){
         english = value.match(/[a-zA-z0-9]/g).length;
     }
      var valueLength = chinese*2+english;
      return valueLength;
    }
    function oneValue() {
      showText.innerHTML = inputText.value;
      var valueLengthOne=ruleOne(inputText.value);
      spanOne.innerHTML = '已经输入 ' + valueLengthOne + ' 个字'
    }
    
js的字符计算问题_第3张图片
Y`07REYP$}_)%CAN46UX}8A.png
  • 上面几个简单的例子作为铺垫之后呢,接下来我们要做的是:
    1,汉字算一个字(包括汉字的标点符号);
    2,一个英文单词算一个字(包括英文的标点符号,没有其他字符隔开时都是一个字;最后一个是字母,下一行开始也是字母,合起来还是一个字)
    3,空格算一个字
    4,换行不算字
    5,最后的空格不算字(最前空格算字)
    6,一个数字算一个字

var textValue=value;
textValue = textValue.replace(/\s+$/, '');//去掉后面空格
textValue=textValue.replace(/[\r\n]/g,'');//去除换行.
textValue = textValue.replace(/[0-9]/g, '全');//把数字用全角符代替
textValue = textValue.replace(/\s/g, '全');//把空格用全角符代替
textValue = textValue.replace(/[\u0000-\u00FF]/g, 'a');//所有半角符变为 a
textValue = textValue.replace(/a+/g, 'b');//把字符串变成b

得到的 textValue.length 就是输入的字数,具体例子如下图所示:

js的字符计算问题_第4张图片
QQ图片20170912115303.png



写的不好望指正 ^_~
如果有更好的方式,欢迎分享 >_<

你可能感兴趣的:(js的字符计算问题)