精彩推荐

PHP判断字符串是纯英文、纯汉字或汉英混合

688人阅读  0人回复   查看全部 | 阅读模式 | 复制链接   

1

主题

1

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2015-4-11 17:59:29
PHP判断字符串是否为中文(或英文)的方法,除了正则表达式判断和拆分字符判断字符的值是否小于128

外还有一种比较特别的方法。

使用php中的mb_strlen和strlen函数判断
方法比较简单:分别使用以上两个函数以当前编码测出字符的返回值,然后比较返回值。
返回值相等的为纯英文、纯数字、英数混排;
返回值不等,且strlen返回值可被mb_strlen整除的为纯汉字
返回值不等,且strlen返回值不可被mb_strlen整除的为英汉或数汉混排

看一下以下的例子:
  1. <?php  
  2. $strarray[1] = "hello";
  3. $strarray[2] = "123456";
  4. $strarray[3] = "123hello";
  5. $strarray[4] = "你好";
  6. $strarray[5] = "123你好";
  7. $strarray[6] = "hello你好";
  8. $strarray[7] = "123hello你好";

  9. foreach ($strarray as $key->$value)
  10. {
  11.     $x = mb_strlen($value,'gb2312');
  12.     $y = strlen($value);

  13.     echo $strarray[$key].'  <span style="color: #ff0000;">'.$x.'</span> <span style="color:#ff0000;">'.$y.'</span>';
  14. }

  15. ?>
复制代码


运行后的结果是:
hello 5 5
123456 6 6
123hello 8 8
你好 2 4
123你好 5 7
hello你好 7 9
123hello你好 10 12

PHP没有直接函数来判断一个字符串是否是纯英文或纯汉字以及汉英混合,只能自己写函数。要想实现此功能就必需对字符集汉字编码占位进行了解,就目前国内比较常用的字符集当属UTF8与GBK了。

UTF8每个汉字等于3个长度;

GBK每个汉字等于2个长度;

利用以上汉字与英文的差异,我们就可以利用mb_strlen函数与strlen函数分别计算出两组长度数字,然后根据规律进行运算即可判断出字符串的类型了。
UTF-8实例
  1. <?php
  2. /**
  3. * PHP判断字符串纯汉字 OR 纯英文 OR 汉英混合
  4. */
  5. echo '<meta charset="utf-8" />';
  6. function utf8_str($str){
  7.     $mb = mb_strlen($str,'utf-8');
  8.     $st = strlen($str);
  9.     if($st==$mb)
  10.         return '纯英文';
  11.     if($st%$mb==0 && $st%3==0)
  12.         return '纯汉字';
  13.     return '汉英混合';
  14. }

  15. $str = '博客';
  16. echo '字符串:<span style="color:red">'.$str.'</span>,是<span style="color:red">'.utf8_str($str).'</span>';
  17. ?>
复制代码



GBK方法
  1. function gbk_str($str){
  2.     $mb = mb_strlen($str,'gbk');
  3.     $st = strlen($str);
  4.     if($st==$mb)
  5.         return '纯英文';
  6.     if($st%$mb==0 && $st%2==0)
  7.         return '纯汉字';
  8.     return '汉英混合';
  9. }
复制代码


回复

使用道具 举报

快速回复 返回顶部 返回列表