asp截取指定英汉混合字符串_支持中文
程序员文章站
2022-05-03 12:39:56
说明:本函数作用是截取指定英汉混合字符串,并保持显示长度一至。就是将一个汉字当两英文来截取。 用途:一般会用在标题显示列表,可以避免截取的字符串参插不齐的现象。 程序代码...
说明:本函数作用是截取指定英汉混合字符串,并保持显示长度一至。就是将一个汉字当两英文来截取。
用途:一般会用在标题显示列表,可以避免截取的字符串参插不齐的现象。
程序代码
'//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个汉字
作了两点优化:
第一点:直接获取指定长度的字符,因为不管是全汉字还是全英文,最长不过是全英文长度,超过的字符是绝对淘汰字符。
第二点:使用正则寻找范围内的汉字,并只遍历每个汉字的字数,这样可以最大程度上减少循环次数。
用途:一般会用在标题显示列表,可以避免截取的字符串参插不齐的现象。
程序代码
复制代码 代码如下:
'//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个汉字
作了两点优化:
第一点:直接获取指定长度的字符,因为不管是全汉字还是全英文,最长不过是全英文长度,超过的字符是绝对淘汰字符。
第二点:使用正则寻找范围内的汉字,并只遍历每个汉字的字数,这样可以最大程度上减少循环次数。