text's blog

goodtext.org

 

说明:本函数作用是截取指定英汉混合字符串,并保持显示长度一至。就是将一个汉字当两英文来截取。

发布:goodtext,分类:编程开发,2008-8-20 11:31:30

说明:本函数作用是截取指定英汉混合字符串,并保持显示长度一至。就是将一个汉字当两英文来截取。

用途:一般会用在标题显示列表,可以避免截取的字符串参插不齐的现象。

程序代码
'//A_strString要处理的字符串
'//A_intLen以英文字符数为准
'//A_strAddString如果A_strString有截取字符时添中的后缀,如:...,可以为空
function CutString(byval A_strString,byval A_intLen,byval A_strAddString)
  dim MM_objRe,MM_objMs,MM_objMh
  dim MM_strCut,MM_intLen
  set MM_objRe=new RegExp
  MM_objRe.Global=true'全局搜索
  MM_objRe.IgnoreCase=true'不区分大小写
  MM_objRe.Pattern="[^\x00-\xff]"
  
  MM_intLen=A_intLen
  if len(A_strString)<=A_intLen then
    MM_strCut=A_strString
  else
    MM_strCut=left(A_strString,MM_intLen)
    set MM_objMs=MM_objRe.execute(MM_strCut)
    if MM_objMs.count<>MM_intLen then
      for each MM_objMh in MM_objMs
        if MM_objMh.FirstIndex<MM_intLen then
          MM_intLen=MM_intLen-1
        else
          exit for
        end if
      next
    else
      MM_intLen=MM_intLen/2
    end if
    MM_strCut=left(A_strString,MM_intLen) & A_strAddString
  end if
  CutString=MM_strCut
  set MM_objRe=nothing  
end function


这个和目前网上流行的不太一样,用的是正则式来获取非ANSI字符(这里默认非ANSI字符为汉字,如果有偏差可以修改正则式来达到目的)。先注明一点:函数指定长度以英文字符数为准。即是指定为10,含义为10个英文或5个汉字
作了两点优化:
第一点:直接获取指定长度的字符,因为不管是全汉字还是全英文,最长不过是全英文长度,超过的字符是绝对淘汰字符。

第二点:使用正则寻找范围内的汉字,并只遍历每个汉字的字数,这样可以最大程度上减少循环次数。

一个asp版XMLDOM的类  (2008-8-20 8:26:5)

ASP操作XML文件创建,查询,修改等对xml操作的主要方法  (2008-7-26 14:17:29)

用fso\用ado.stream写xml文件  (2008-7-23 7:20:54)

操作文本的精典Function函数ASP+FSO  (2008-7-22 10:23:7)

数据操作函数  (2008-6-25 7:49:46)

几种过滤HTML代码的应用  (2008-4-27 10:33:17)

ASP防注入危险字符代码  (2008-4-10 18:56:43)

GOODTEXT.ORG留言本 V 1.0  (2008-3-30 22:3:32)

留言管理部分代码 留言本制作过程(3)  (2008-3-30 21:5:59)

显示留言部分代码 GOODTEXT.ORG留言本制作过程(2)  (2008-3-30 20:57:14)