好的,所以我有一个变量$ phone,其中包含字符串(407)888-9999,我有这段代码
if($phone != ''){ $phone = "<span id='telephone'>{$phone}</span>";}
return $phone;
这很好但现在客户端希望在区号和接下来的三个数字之间加一些填充。所以我需要代码就像这样
<span id='telephone'><span class='spacer'>(407)</span>888-9999</span>";
答案 0 :(得分:3)
您确定该字符串格式正确吗?如果是这样,你可以将它分解为子串:
$phone = "<span id='telephone'><span class='spacer'>{substr($phone, 0, 5)}</span>{substr($phone, 5, 8)}";
答案 1 :(得分:3)
鉴于没有人提到这一点,我会从数字中删除所有非数字字符。完成后,您可以使用正则表达式轻松获取数字,这样任何格式都是有效的,无论用户输入什么,您都可以根据需要格式化它:
$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.";
}
只要有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.";
}
答案 2 :(得分:1)
你可以这样做:
$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 .= ')';
}
答案 3 :(得分:0)
如果电话号码始终采用相同的格式,您可以将其拆分为:
list($area,$phone1,$phone2) = sscanf($phone,'(%d)%d-%d');
或
sscanf($phone,'(%d)%d-%d',$area,$phone1,$phone2)
答案 4 :(得分:0)
<?php
preg_match("/(\([^\)*]\))(.*)/", $phone, &$matches);
var_dump($matches);
print "<span id='telephone'><span class='spacer'>({$matches[1]})</span>$matches[2]</span>";
?>
答案 5 :(得分:0)
你可以使用这样的简单str_replace,只要你确定电话号码在区号周围有括号......
$phone = "(902)555-1234";
if($phone != ''){
$phone = str_replace(")", ") ",$phone);
$phone = "<span id='telephone'>{$phone}</span>";
}
return $phone;