在php中拆分电话号码

Mat*_*iby 3 css php

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

 if($phone != ''){ $phone = "<span id='telephone'>{$phone}</span>";}
return $phone;
Run Code Online (Sandbox Code Playgroud)

这工作正常,但现在客户希望在区号和接下来的三个数字之间有一些填充。所以我需要代码像这样

<span id='telephone'><span class='spacer'>(407)</span>888-9999</span>";
Run Code Online (Sandbox Code Playgroud)

Jim*_* W. 5

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

$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.";
}
Run Code Online (Sandbox Code Playgroud)

只要有10位数字,电话号码怎么输入都行。

更新

您也可以使用该preg_replace技术substr并放弃对preg_match. 这实际上是我首选的解决方案。

$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.";
}
Run Code Online (Sandbox Code Playgroud)