Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中拆分电话号码_Php_Css - Fatal编程技术网

在php中拆分电话号码

在php中拆分电话号码,php,css,Php,Css,好的,我有一个变量$phone,它包含字符串(407)888-9999,我有这个代码 if($phone != ''){ $phone = "<span id='telephone'>{$phone}</span>";} return $phone; if($phone!=''){$phone=“{$phone}”;} 退回$phone; 这很好,但现在客户端希望在区号和接下来的三个数字之间有一些填充。所以我需要这样的代码 <span id='telephon

好的,我有一个变量$phone,它包含字符串(407)888-9999,我有这个代码

 if($phone != ''){ $phone = "<span id='telephone'>{$phone}</span>";}
return $phone;
if($phone!=''){$phone=“{$phone}”;}
退回$phone;
这很好,但现在客户端希望在区号和接下来的三个数字之间有一些填充。所以我需要这样的代码

<span id='telephone'><span class='spacer'>(407)</span>888-9999</span>";
(407)888-9999”;

您确定字符串的格式正确吗?如果正确,您可以将其拆分为子字符串:

 $phone = "<span id='telephone'><span class='spacer'>{substr($phone, 0, 5)}</span>{substr($phone, 5, 8)}";
$phone=“{substr($phone,0,5)}{substr($phone,5,8)}”;

如果电话号码的格式始终相同,您可以将其拆分为:

list($area,$phone1,$phone2) = sscanf($phone,'(%d)%d-%d');

你可以做:

$input = "(407)888-9999";
$area_code = ''; 
$ph_num = $input;
if(strpos($input,')') !== false) { // if area-code is present.
        list($area_code,$ph_num) = explode(')',$input); 
        $area_code .= ')';
}
你需要:


如果没有其他人提到这一点,我将从数字中删除所有非数字字符。完成后,您可以使用正则表达式轻松获取数字,这样一来,任何格式都是有效的,并且无论用户输入什么,您都可以按照您的需要对其进行格式化:

$phone = preg_replace("~[^0-9]~", "", $phone);
preg_match('~([0-9]{3})([0-9]{3})([0-9]{4})~', $phone, $matches);

if (!empty($matches)) {
    $display = "<span id='telephone'><span class='spacer'>(" . 
                $matches[1] . ")</span>" . $matches[2] . "-" . $matches[3] . "</span>";
}else {
    $display = "An invalid phone number was entered.";
}

你可以用这样一个简单的str_替换,只要你确定电话号码在区号周围有括号

$phone = "(902)555-1234";

if($phone != ''){
    $phone = str_replace(")", ") ",$phone);
    $phone = "<span id='telephone'>{$phone}</span>";
}
return $phone;
$phone=“(902)555-1234”;
如果($phone!=''){
$phone=str_替换(“),”,$phone);
$phone=“{$phone}”;
}
退回$phone;

如果已知字符串已正确格式化(通过任何以前的验证),则正则表达式是多余的—过于复杂,处理器过于消耗。引用经常引用的Jamie Zawinski的话:“有些人在遇到问题时,会认为‘我知道,我会使用正则表达式’。现在他们有两个问题。“@James Burgress,虽然很有趣,有时甚至可能是低谷,但有很多有效的好地方可以使用正则表达式。解析电话号码就是这样的一个领域。当然,但只需插入一个空格(这是OP请求的全部内容,我们假设他已经验证了号码格式),正则表达式是多余的。另一方面:如果你不知道字符串的格式是否正确,这将失败,并出现一系列错误:)在这种情况下,你需要很多额外的逻辑来找出字符串的正确格式。在这种情况下,正则表达式可能证明是一个更简单的解决方案。如果从用户检索数据,我会同意。然而,在这种情况下,应该进行更多的消毒(超出了这个问题的范围)。如果数据是从数据库中检索的,那么您可以假定数据在输入期间已被清理,从而节省一些不需要的开销。
$phone = preg_replace("~[^0-9]~", "", $phone);
preg_match('~([0-9]{3})([0-9]{3})([0-9]{4})~', $phone, $matches);

if (!empty($matches)) {
    $display = "<span id='telephone'><span class='spacer'>(" . 
                $matches[1] . ")</span>" . $matches[2] . "-" . $matches[3] . "</span>";
}else {
    $display = "An invalid phone number was entered.";
}
$phone = preg_replace("~[^0-9]~", "", $phone);

if (strlen($phone) == 10) {
    $display = "<span id='telephone'><span class='spacer'>(" . 
                substr($phone,0,3) . ")</span>" . substr($phone,2,3) . "-" . substr($phone,5,4) . "</span>";
}else {
    $display = "An invalid phone number was entered.";
}
$phone = "(902)555-1234";

if($phone != ''){
    $phone = str_replace(")", ") ",$phone);
    $phone = "<span id='telephone'>{$phone}</span>";
}
return $phone;