判断字符串长度

本文提供了一系列JavaScript函数用于处理字符串,包括统计字符串中字符的ANSI长度、判断字符是否为字母、数字或可打印标点符号等。同时介绍了如何限制文本框内字符数量及实现自定义的字符串长度计算。

 

判断字符的一些js代码收集:

/**
 *  /brief 求得一个字符串的ANSI字符串长度,这里中文字符算两个。
 *  /param value 传入的UNICODE字符串
 *  /return 返回字符串的ANSI字符串长度
 */
function ByteWordCount(value) {
  var txt = value;
  txt = txt.replace(/(<.*?>)/ig,'');  
  txt = txt.replace(/([/u0391-/uFFE5])/ig,'11');
  return txt.length;
}

----------------------------------------------------
txt = txt.replace(/([/u0391-/uFFE5])/ig,'11');
这一句的正则是什么意思啊?

代表中文字符的范围,像英文范围 A-Z,a-z一样。

东亚文字区的字符编码都是双字节的,得把它们替换成两个字母或数字,这样统计起来才正确。

这里的'11' 是可以变的,只要是双字节即可如'kk'.

----------------------------------------------------

 

/**
 *  /brief 判断一个字符是否是字母
 *  /param ch 要判断的字符
 *  /return true 是 false 不是
 */
function isAlpha(ch) { 
  if(ch >= "a" && ch <= "z") return true;
  if(ch >= "A" && ch <= "Z") return true;
  return false;
}


 

/**
 *  /brief 判断一个字符是否是数字
 *  /param ch 要判断的字符
 *  /return true 是 false 不是
 */
function isNumber(ch) { 
  if(ch >= "0" && ch <= "9") return true;
  return false;
}



 

/**
 *  /brief 判断一个字符是否是可打印标点符号
 *  /param ch 要判断的字符
 *  /return true 是 false 不是
 */
function isSpecial(ch) { 
  var special = new Array("!","/"","#","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","//","]","^","_","`","{","|","}","~") 
  for(var i=0;i<special.length;++i) 
    if(ch == special[i ]) return true;
  return false;
}



 

function CheckValidStr(value)
{
  var count=0;
  for(var i=0;i<value.length;++i) 
  {
    var ch = value.charAt(i);
    if(isAlpha(ch)||isNumber(ch)||isSpecial(ch))
      count++;
    else
      count=0;
    if(count>20)
    {
      return false;
    }
  }
  return true;
}

 

-----------------------------------------------------------------

 


------------------------------------------------------------------------------
 
 

字符串长度计算是最简单了,说这个话题难免被人笑话,不过要是计算的字符串有具体要求就稍微有点想头了。高手自然可以跳过不读,免得我贻笑大方。

最近做新闻发布系统,编辑发表新闻的时候标题不能超,所以要做个script计算一下长度(这里主要是说java,javascript带过),要求标题里面的英文算半个,中文算一个字长,标签不能算长度,标签是为了页面上显示标题颜色而来的。于是有如下script
<script>
function ByteWordCount(textarea) {
var txt = textarea.value;
txt = txt.replace(/(<.*?>)/ig,'');
txt = txt.replace(/([/u0391-/uFFE5])/ig,'11');
var count = txt.length;
alert('字符串字数:' + count/2);
}
</script>

在服务器端输出新闻到栏目页面的时候,要自动截断超过长度的新闻标题,
  public static String substring(String str,int len ){
    len=len*2;
   StringBuffer sb = new StringBuffer();
   int counter=0;
   for(int i=0;i<str.length();i++){
    char c = str.charAt(i);
    if(c<255){
      counter++;
    }else{
   counter=counter+2;
    }
    if(counter>len){
      break;
    }
    sb.append(c);
   }
    return sb.toString();
  }
因为是按照char取字符,用上面的方法截断字符串不会有乱码。
这里的长度也是英文算半个,中文算一个,如此新闻长标题不会把页面撑了。
而截取含有颜色标签html代码的标题,要做特别处理
 final static String regexStr = "(<[//p{Alnum}|//p{Punct}|//s]+?>)(.+?)(<[//p{Alnum}|//p{Punct}|//s]+?>)";
 final static Pattern tagPattern = Pattern.compile(regexStr);
 /**裁截<font color=red>title</font>的长度*/
 public static String subTagString(String input,int len){
   StringBuffer result = new StringBuffer();
   Matcher matcher = tagPattern.matcher(input);
   while(matcher.find()){
     result.append(matcher.group(1));
     result.append(substring(matcher.group(2),len));//按长度截断
     result.append(matcher.group(3));
   }
   if(result.length()==0){
     return substring(input,len);
   }
   return result.toString();
   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值