中英文混合字符截取

用perl截取字符串,字符串中含有中文、英文、数字和各种符号,也包含中文标点符号,截取一定数量的字符,并且截取之后中文是完整的,不会出现乱码或问号。
sub makelen($$)
{
my($sstr,$slen)=@_;
my $makelen,$parity;
$mslen=length($sstr);
if($mslen>$slen)
{
for($mn=0;$mn<$slen;$mn++) #在要求的长度内
{
$ss=substr($sstr,$mn,1);
if(ord($ss)<127) #为英文
{
$parity+=1;
}
}
if($parity%2==1) #含英文长度为奇数
{
if($slen%2==1) #如果所要求的长度也为奇数
{
$tmpstr=substr($sstr,0,$slen);
}
else #所要求的长度为偶数
{
$tmpstr=substr($sstr,0,$slen-1);
}
}
else #含英文长度为偶数或者为0,0也为偶数
{
if($slen%2==1) #如果所要求的长度为奇数
{
$tmpstr=substr($sstr,0,$slen-1);
}
else #所要求的长度为偶数
{
$tmpstr=substr($sstr,0,$slen);
}
}
$makelen=$tmpstr;
}
else
{
$makelen=$sstr;
}
return $makelen;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值