用‘*’替换字符串中的手机号 固话 邮箱 QQ号码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25275355/article/details/83181925
/**
     * 用‘*’替换字符串中的手机号 固话 邮箱 QQ号码
     * 2018-10-11
     */
 function ReplaceThePhoneNumbers($oldStr = ""){
        //1.检测字符串是否为空
        if(empty($oldStr)){
            return "";
        }
        //2.如果没有数字的直接返回
        $oldStr_trim=trim($oldStr);
        $patterns = "/\d+/";
        preg_match_all($patterns,$oldStr_trim,$arr);
        if(!$arr[0]){
            return $oldStr;
        }
        //3.邮箱替换提取数据
        $preg = "/([a-z0-9\-_\.]+@[a-z0-9]+\.[a-z0-9\-_\.]+)+/i";
        if (preg_match_all($preg, $oldStr , $matches)) {
            foreach ($matches[0] as $key=>$val){
                $temp_str = $val;
                $email_array = explode("@", $temp_str);
                if(strlen($email_array[0]) < 6){
                    $pre = '';
                    $star_len = strlen($email_array[0]);
                    if(strlen($email_array[0]) == 5){
                        $pre = substr( $email_array[0], 0, 1 );
                        $star_len = strlen($email_array[0])-1;
                    }
                    $star = '';
                    for($i = 0;$i < $star_len;$i ++){
                        $star .='*';
                    }
                    $temp_str = $pre.$star.'@'.$email_array[1];
                }else{
                    $pattern = '/([a-z0-9\-_\.])[a-z0-9\-_\.]{4}(([a-z0-9\-_\.])@[a-z0-9]+\.[a-z0-9\-_\.]+)/';
                    $replacement = "\$1****\$2";
                    $temp_str = preg_replace($pattern, $replacement, $temp_str);
                }
                $oldStr =  str_replace($val,$temp_str,$oldStr);
            }
        }
        // 4.删除86-180640741122,0997-8611222之类的号码中间的减号(-)
//     $strArr = explode("-", $oldStr);
//     $newStr = $strArr[0];
//     for ($i=1; $i < count($strArr); $i++) {
//         if (preg_match("/\d{2}$/", $newStr) && preg_match("/^\d{11}/", $strArr[$i])){
//             $newStr .= $strArr[$i];
//         } elseif (preg_match("/\d{3,4}$/", $newStr) && preg_match("/^\d{7,8}/", $strArr[$i])) {
//             $newStr .= $strArr[$i];
//         } else {
//             $newStr .= "-".$strArr[$i];
//         }
//         $oldStr = $newStr;
//     }
        //5.保证头尾能被检测到
        $oldStr_jiange = implode('间隔符',$arr[0]);
        $oldStr_jiange = '间隔符'.$oldStr_jiange.'间隔符';

        //6.提取QQ 号码
        $preg='/\D(?:)?(\d{5,10})\D/i';//匹配数字的正则表达式
        if (preg_match_all($preg, $oldStr_jiange , $matches)) {
            if($matches[1]){
                foreach ($matches[1] as $key=>$val){
                   if(strlen($val) == 5||strlen($val) == 6){
                       $temp_str = substr_replace($val,"****",1,4);
                   }else{
                       $temp_str = substr_replace($val,"****",strlen($val)%4+2,4);
                   }
                    $oldStr =  str_replace($val,$temp_str,$oldStr);
                }
            }
        }
        //7.替换手机号
        $pattern = "/(\d{3})\d{4}(\d{4})/";
        $replacement = "\$1****\$2";
        return preg_replace($pattern, $replacement, $oldStr);
    }

猜你喜欢

转载自blog.csdn.net/qq_25275355/article/details/83181925