• 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

     

  • 相关阅读:
    协方差矩阵
    SLAM中的关键帧是什么?有什么用?如何选择关键帧?
    EKF算法与非线性优化算法的比较
    LC217 存在重复元素
    LC42 接雨水
    LC20 有效的括号
    LC3 无重复最长子串
    LC4 寻找两个有序数组的中位数
    ubuntu16.04下安装g2o
    小米 各版本手机系统包 线刷包 卡刷包
  • 原文地址:https://www.cnblogs.com/23lalala/p/3382946.html
Copyright © 2020-2023  润新知