<?php
$test="啊啊啊没没没呀呀呀";
print_r(preg_replace('/(.){3}(.){3}(.){3}/u',"\${1}\${2}\${3}",$test));
?>
上边这个只能匹配你给的那个连续三个的串,下边这个稍微好一点
<?php
$test="11111222222啊啊啊啊没没没没呀呀呀呀111111呀呀呀呀bbbbbbcccAAAccc111啊啊啊1133333啊啊";
$test= str_replace("","",$test);
$testChinese= preg_replace('/(\w+)/',"\${2}",$test);
$testNum= preg_replace('/(\W+)/',"\${2}",$test);
$resultChinese= dropDuplicateArr($testChinese,3);
$resultNum= dropDuplicateArr($testNum,1);
for($i= 0;$i< sizeof($resultChinese);$i++)
echo$resultChinese[$i];
for($i= 0;$i< sizeof($resultNum);$i++)
echo$resultNum[$i];
function dropDuplicateArr($string,$size)
{
$arr= str_split($string,$size);
for($i= 0;$i< sizeof($arr);$i++)
{
static$j= 0;
if($arr[$i]==$arr[$i+1])
continue;
else
$result[$j++]=$arr[$i];
}
return$result;
}
?>
输出结果"啊没呀啊121bc"
这个还有很多弊端,由于我能力有限,也做不了太完善了,呵呵,几点注意:
1.$resultChinese= dropDuplicateArr($testChinese,3);由于我的编码是UTF-8的,所以中文是3个字符,要是GB2312,改成2就可以了,字母数字都是1
2.就是由于中文和字母数字是分开处理的,所以输出后不能混排
3.就是如果人家想打个‘哈哈’,也会被屏蔽掉一个
4.如果每个用户发布留言都做这个处理,且网站流量比较大,势必给服务器带来很大压力,倒不如控制字符个数,或者用JS,联系6个以上一样的发言就不通过
呵呵,我尽力了,希望对你有帮助吧
如果你还想了解更多这方面的信息,记得收藏关注本站。