您的位置:首页 > 编程语言 > PHP开发

PHP 判断字符串长度 判断纯中文 的两种方法比较

2016-07-23 00:00 661 查看
摘要: PHP 使用长度&正则表达式判断字符串长度 使用长度倍数关系&字符串判断是否纯中文

1.判断字符串长度

以 判断字符串长度在2-30个字符 为一个标准,因为在实际中(现在的公司)控制网页输入字符串字段就是规定2-30个字符..._(:з」∠)_

method1:用strlen或者mb_strlen的php内置函数

//    method1
$str_len = strlen($str_3);
if($str_len<2||$str_len>30){

}else{

}

method2:用强大的正则表达式 (\S表示可见元素)

//method2
if(!preg_match('/^(\S){2,30}$/',$str_3)){

}else{

}


既然有两种方法就有对比嘛...所以就分别测试了一下运行速度

以下是用str1,str2,str3(字符串的长度为1,10,40)分别测试10次循环1000次的结果,单位:秒(s)



好啦重点是最下面一行,可以看出method2/method1的速度分别为9倍,13倍,21倍,看来method1比较快而且随着字符串长度的增加,method1速度并没有显著增加,而method2的却增加了挺多时间(至于是不是线性,我也就懒得理啦~)所以method1的优势更能体现。

所以:method1取胜,好评!

2.判断是否纯中文

method1:嗯method1也是用strlen和mb_strlen,不过巧妙的是 用这两个函数对中文的倍数关系,因为strlen认为中文是3个字符,但是设置字符集为utf8的mb_strlen认为中文是1个字符。

//method1
$ch_1_mb = mb_strlen($ch_4,'utf8');
$ch_1_len = strlen($ch_1);
if($ch_1_mb*3 == $ch_1_len){

}else{

}

method2:也是用无所不能的正则表达式...

//method2
if(!preg_match('/^[\x{4e00}-\x{9fa5}]+$/u',$ch_4)){

}else{

}


然后就是性能比较啦,以下用ch_1~4 4个字符串(复杂和难度依次增)来测试的结果,单位:秒(s)



这次的结果反而不同了耶....最后一行显示method1/method2的速度比为4~2倍不等,那就是method2比较高效,再细看每一项,发现method1的每个字符串的平均执行时间都差不多,method2就时高时低了(不知道是我电脑的问题 or php对某些字符的处理比较慢?),反正就是method2正则表达式比较高效啦!

如有错误,恳请指点。_(:з」∠)_,谢谢观看。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: