我一直在绞尽脑汁想如何格式化一个简单的手机号码,但却想不出该怎么做。一位朋友对我说我可以使用preg_replace功能,但我不确定,因为我已经读过了,但不熟悉它。基本上,我想做的是浏览一个字符串,说出一条包含以下内容的信息:"嗨,我叫约翰,你能打电话给我吗?07771234567谢谢",并将其替换为"嗨,你能给我打电话吗?07xx12x4xx7谢谢"。换句话说,将数字的一部分替换为"x"。
我也知道有些人可能会写这样的手机:"0777 123 4567",所以也需要它来去除空白。此外,它还需要查找数字的开始和结束,尽管我使用了一个名为stripos()的函数来通过查找"07"的开始位置来查找数字的开头。
如有任何帮助,我们将不胜感激。谢谢
类似的方法应该可以工作,尽管可能有直接的regex方法:
$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';
}
}
http://www.braemoor.co.uk/software/telnumbers.shtml
你可以从这个网站下载一个PHP函数,它可以让你验证所有不同类型的英国电话号码。
我使用的是一个实时系统atm,所以它可以正常工作。
好运
这并不能解释所有格式,有些电话号码可以放在不同的格式中,不能只通过检查011或长度来完成。您需要一份所有区号/组合的完整列表,以检查每个可能的长度。
http://support.hostgator.com/articles/specialized-help/making-international-calls-from-the-united-states例如,你可能会看到一个在英国的电话号码以以下方式表达:
(+44)(0)20 7930 4832+44 20 7930 4832020 7930 4832
简单的解决方案可能是。而且我对这段代码不满意,我相信它是否可以简化一千次。
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;
}