php通过gbk编码判断 含有连续数字 可用于判断QQ号,手机号等。

有可能有些输入,不希望让用户的评论或者私信中含有类似于QQ号,手机号的文本,比如交友网站。还有些恶意SEO通过,构造恶意检索词,检索词中包含QQ,手机号等,让百度爬取到,增加展现。也需要将这些检索词屏蔽掉。numberSafe函数通过GBK码表,判断输入是否包含连续的5个数字,中文数字,数字谐音,或者特殊中文字符(①②Ⅰ Ⅱ等)如果包含返回false,不包含返回true。

 1 function numberSafe($str) {
 2     //阿拉伯数字
 3     $assicNum = array(48,57);
 4     //中文字符
 5     $chineseNum = array(
 6         //特殊数字
 7         '162'=>array(161,255),
 8         //
 9         '210'=>array(187,239),
10         //
11         '182'=>array(248,256),
12         '183'=>array(161,161),
13         //
14         '200'=>array(253,256),
15         '201'=>array(161,162),
16         //
17         '203'=>array(185,200),
18         //
19         '206'=>array(215,243),
20         //六 零
21         '193'=>array(224,249),
22         //
23         '198'=>array(218,253),
24         //
25         '176'=>array(197,214),
26         //
27         '190'=>array(190,206),
28         //
29         '202'=>array(166,212)
30     );
31     $str = iconv('UTF-8', 'GBK', $str);
32     $dangoursMax = $dangours = 0;
33     for ( $i = 0; $i < strlen($str) && $dangouesMax < 5; ) {
34         $assic = ord($str[$i]);
35         if ( $assic < 128 ) {
36             if ( $assic > $assicNum[0] - 1 && $assic < $assicNum[1] + 1 ) {
37                 $dangours++;
38             } else {
39                 $dangoursMax = max($dangours, $dangoursMax); 
40                 $dangours = 0;
41             }
42             $i += 1;
43         } else {
44             $assicNext = ord($str[$i+1]);
45             if ( array_key_exists($assic, $chineseNum) && $assicNext > $chineseNum[$assic][0] - 1 
46                     && $assicNext < $chineseNum[$assic][1] + 1 ) {
47                 $dangours++;
48             } else {
49                 $dangoursMax = max($dangours, $dangoursMax);
50                 $dangours = 0;
51             }
52             $i += 2;
53         }
54     }
55     $dangoursMax = max($dangours, $dangoursMax);
56     return $dangoursMax < 5 ? true : false;
57 }

测试

var_dump(numberSafe('12345'));   //false
var_dump(numberSafe('一二三四五')); //false
var_dump(numberSafe('一贰叁肆五')); //false
var_dump(numberSafe('衣领511'));    //false
var_dump(numberSafe('⒈⒉⒊⒋⒌')); //false

 

原文地址:https://www.cnblogs.com/23lalala/p/3382946.html