用PHP格式化手机号码

用PHP格式化手机号码,php,formatting,preg-replace,phone-number,Php,Formatting,Preg Replace,Phone Number,我一直在绞尽脑汁想如何设置一个简单的手机号码的格式,但没想到怎么做。一位朋友对我说,我可以使用preg_replace功能,但我不确定,因为我读过它,但不熟悉它。基本上,我想做的是通过一个字符串说出一条包含“你好,我的名字是约翰,你能打电话给我吗07771234567谢谢”的消息,然后将其替换为“你好,我的名字是约翰,你能打电话给我吗07xx12x4xx7谢谢”。换言之,将部分数字替换为“x” 我也知道有些人可能会写这样的手机:“0777 123 4567”,所以也需要它来去除任何空白。此外,它

我一直在绞尽脑汁想如何设置一个简单的手机号码的格式,但没想到怎么做。一位朋友对我说,我可以使用preg_replace功能,但我不确定,因为我读过它,但不熟悉它。基本上,我想做的是通过一个字符串说出一条包含“你好,我的名字是约翰,你能打电话给我吗07771234567谢谢”的消息,然后将其替换为“你好,我的名字是约翰,你能打电话给我吗07xx12x4xx7谢谢”。换言之,将部分数字替换为“x”

我也知道有些人可能会写这样的手机:“0777 123 4567”,所以也需要它来去除任何空白。此外,它还需要查找数字的开始和结束,尽管我使用了一个名为stripos()的函数来查找数字的开始位置“07”


任何帮助都将不胜感激。谢谢

尽管可能有直接的正则表达式方法:

$foo = '07771234567';
$foo = preg_replace( '/\s+/', ' ', $foo ); // remove whitespaces
$foo = str_split($foo); // split into an array so we can loop over it more easily
$replace_with_x = array(2, 3, 6, 8, 9); // the positions of numbers you want to replace

// loop through your phone number, and replace with x where necessary
for($i=0; $i<len($foo); $i++) {
   if(in_array($i, $replace_with_x)) {
      $foo[$i] = 'x';
   }
}
$foo='07771234567';
$foo=preg_replace('/\s+/','$foo);//删除空白
$foo=str_split($foo);//分成一个数组,这样我们就可以更容易地在上面循环
$replace_为_x=数组(2,3,6,8,9);//要替换的数字的位置
//循环查看您的电话号码,必要时替换为x
对于($i=0;$i

您可以从这个站点下载一个PHP函数,它允许您验证所有不同类型的英国电话号码

我使用的是一个实时系统atm,所以它可以工作


祝你好运

这并不是所有格式都适用的,有些电话号码可以以不同的格式放置,而且不能仅通过检查011或长度来完成。你需要一份所有区号/组合的完整列表来检查每个可能的长度

例如,您可能会看到英国(UK)的电话号码以以下方式之一表示:

(+44)(0)207934832 +44 20 7930 4832 020 79304832

简单的解决方案可能是。而且我对这段代码不满意,我确信它可以简化大约一千倍

private function cleanNumber($uglyNumber){

    $number = preg_replace("/[^0-9]/","",$uglyNumber);
    if(($check = substr($number,0,3))!=='011'){
        //NON 011 Numbers

        switch(strlen($number)){
            //Same Area Code 
            //123-4567
            case 7:
                $prefix = substr($number,0,3);
                $SLN = substr($number,3,10);
                $cleanNumber = $prefix.'-'.$SLN;
                break;

            //Domestic US
            //No International Number
            case 10:
            $area = substr($number,0,3);
            $prefix = substr($number,3,3);
            $SLN = substr($number,6,10);
            $cleanNumber = '('.$area.') ' .$prefix.'-'.$SLN;
                break;

            case 11:
            // International Number [1]
                $country = substr($number,0,1);
                $area = substr($number,0,3);
                $prefix = substr($number,4,3);
                $SLN = substr($number,7,10);
                $cleanNumber = '['.$country .'] ('.$area.') ' .$prefix.'-'.$SLN;
                break;

            case 12:
            // International Number [12]
                $country = substr($number,0,2);
                $area = substr($number,0,3);
                $prefix = substr($number,4,3);
                $SLN = substr($number,7,10);
                $cleanNumber = '['.$country .'] ('.$area.') ' .$prefix.'-'.$SLN;
                break;

            case 13:
            // International Number [123]
                $country = substr($number,0,3);
                $area = substr($number,0,3);
                $prefix = substr($number,4,3);
                $SLN = substr($number,7,10);
                $cleanNumber = '['.$country .'] ('.$area.') ' .$prefix.'-'.$SLN;
                break;

            default:
                //dono 
                return $number;
        }

    }else{
        switch(strlen($number)){

            case 11:
                // ExitUS 001 [1]
                //No Area Code Country
                $exitUs = substr($number,0,3);
                $country = substr($number,3,1);
                $prefix = substr($number,4,3);
                $SLN = substr($number,7,11);
                $cleanNumber = ''.$exitUs .' ['.$country.'] ' .$prefix.'-'.$SLN;
                break;

            case 12:
                // ExitUS 001 [12]
                //No Area Code Country
                $exitUs = substr($number,0,3);
                $country = substr($number,3,2);
                $prefix = substr($number,4,3);
                $SLN = substr($number,7,12);
                $cleanNumber = ''.$exitUs .' ['.$country.'] ' .$prefix.'-'.$SLN;
                break;

            case 13:
                // ExitUS 001 [123]
                //No Area Code Country
                $exitUs = substr($number,0,3);
                $country = substr($number,3,3);
                $prefix = substr($number,6,3);
                $SLN = substr($number,9,13);
                $cleanNumber = ''.$exitUs .' ['.$country.'] ' .$prefix.'-'.$SLN;
                break;

            case 14:
                // ExitUS 001 [1]
                // With Country Code
                $exitUs = substr($number,0,3);
                $country = substr($number,3,1);
                $area   = substr($number,4,3);
                $prefix = substr($number,7,3);
                $SLN = substr($number,10,14);
                $cleanNumber = ''.$exitUs .' ['.$country.'] ('.$area.') ' .$prefix.'-'.$SLN;
                break;

            case 15:
                // ExitUS 001 [12]
                // With Country Code
                $exitUs = substr($number,0,3);
                $country = substr($number,3,2);
                $area   = substr($number,5,3);
                $prefix = substr($number,8,3);
                $SLN = substr($number,11,4);
                $cleanNumber = ''.$exitUs .' ['.$country.'] ('.$area.') ' .$prefix.'-'.$SLN;
                break;

            case 16:
                // ExitUS 001 [123]
                // With Country Code
                $exitUs = substr($number,0,3);
                $country = substr($number,3,3);
                $area   = substr($number,6,3);
                $prefix = substr($number,9,3);
                $SLN = substr($number,12,4);
                $cleanNumber = ''.$exitUs .' ['.$country.'] ('.$area.') ' .$prefix.'-'.$SLN;
                break;

            default:
                //dono 
                return $number;
        }

    }

    return $cleanNumber;
}

为什么只有手机号码?与您的设置相关?别忘了手机号码也可以在英国以
+447799123456
的形式书写(我假设是英国,因为您选择的是
07
)。当然,在国际上,数字遵循数百种约定。str_分割不是真的必要,你可以使用第二个字符串$条,在上面写上“x”或数字。谢谢大家!是的,它在英国数字上,这是一个很好的观点,所以我会确保在消息字符串中搜索“07”或“+4407”或“+447”对于那些没有0的人来说。基本上,我想做的是屏蔽一个电话号码,这个号码会留在我的留言板上供我的网站使用,因为是的,有些人有时候很笨,会留下他们的电话号码让全世界都看到,所以我想屏蔽它,这样就没有人能看到它。但是作为管理员,我可以看到fu我上面使用的代码似乎不起作用,其他人知道我是怎么做到的吗?也许用我建议的方法-substr_replace()@GeordieDave1980-诀窍是当你做卫生工作时-如果它在进入你的数据存储(数据库?)的过程中,它将被模糊地存储,你永远不会有一个清晰的版本(不一定是一件坏事,因为它不是真正需要的)。或者,不经修改地存储它,并在呈现页面时应用这些答案中建议的过滤。这样,“清除”版本就在数据库中,并且可以在必要时读取。值得注意的是,这里的任何方法都不是防弹的(也不是试图做到防弹的),因此,虽然这对于无意中输入的电话号码来说很好,但如果你想保护自己免受恶意用户(如XSS)的攻击,你将……需要一些更强大的功能