快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

截取一定长度字符串

vbs和js都提供了截取一定长度的字符串的函数,但有一个问题是这些函数都将中文字符视为1个字节,而不是正常的2个字节,假如这些输入的数据要提交到数据库中的话,很可能这些数据的真正长度回答与数据库中该字段所答应的最大长度,于是就出错了。
\\\'--------------------*****START*****--------------------

FUNCTION strLeft(str,num)

DIM p_str,p_num
p_str = ""
p_num = 0 \\\'定义变量,标记中文为2字节时的实际字符数

IF TRIM(str)<>"" THEN

FOR i = 1 TO num

IF asc(mid(str,i,1))>255 OR ASC(mid(str,i,1))<0 THEN \\\'判定下一个欲取的字符所占字节数
p_num = p_num + 2
Else
p_num = p_num + 1
End IF

IF p_num > num THEN EXIT FOR

NEXT

p_str = Left(str,i-1) \\\'把i-1替换为i,则产生与“说明”中相反的情况。

END IF

strLeft=p_str

END FUNCTION

\\\'--------------------******END******--------------------
可是在实际使用中发现程序有些问题:假如提交的字符串字数少于所答应的最大字数则程序汇报错,原因是 FOR 循环处的循环次数大于字符串的实际长度,导致下一句中mid函数的参数 i 大于字符串的长度,出现错误。
我针对这个程序作了如下改进:
function strLeft(str,num)
dim p_str,p_num
p_str = ""
p_num = 0

if trim(str) <> "" then
p_len = len(str)
for i = 1 to p_len
if asc(mid(str,i,1)) > 255 or asc(mid(str,i,1)) < 0 then
p_num = p_num + 2
else
p_num = p_num + 1
end if

if p_num > num then
p_str = Left(str,i-1)
exit for
else
p_str = str
end if
next
end if

strLeft=p_str
end function
这样就不会出现那个问题了。
返回类别: 教程
上一教程: 一个用ASP生成HTML的新方式
下一教程: 用ASP创建数据库

您可以阅读与"截取一定长度字符串"相关的教程:
· 截取固定长度字符串显示在页面
· 截取固定长度字符串显示在页面,多余部分显示为省略号(区分汉字和字符)
· 生成指定长度的随机字符串
· 测字符串长度函数
· 控制输出字符串的长度,可以区别中英文
    微笑服务 优质保证 索取样品