今天看到一截取字符函数,代码如下:function(s, n){
if(!s)return'';
var i=-1, j=s.length, k=0, t, r=/[^\u00-\uff]/;//r=/[^\u00-\uff]/匹配什么范围的字符?
while(++i<j){
t=s.substr(i, 1);
k++;//此处的k应为已经取得的字符个数,好理解。
if(t.match(r))k++;//此处的k++;有点不明白,为什么要增加?
if(k>n)return s.substr(0, i-1)+'\u2026';//'\u2026'是什么字符?经过测试发现弹出内容为空白?
}
return s

解决方案 »

  1.   

    [code=JScript]
    r=/[^\u00-\uff]//匹配双字节字符
     
      

  2.   

    if(t.match(r))k++;//此处的k++;有点不明白,为什么要增加?r匹配的是所有的双字节字符,如果下一个字符是双字节字符,则把k再增加一个计数.这样n可以对应截取结果的字节数,而不是字符数,避免在某些长度计算的地方产生意外.比如存入sqlserver...会占用2个varchar,这样计算出的长度可以避免非双字节的存储规则出错.\u2026表示的是省略号"..."