簡體   English   中英

將 10 位字符串格式化為帶連字符的電話號碼

[英]Format 10-digit string into hyphenated phone number

我有一個包含十位數電話號碼的字符串,我想用連字符對其進行格式化。

我正在尋找一種將123456790轉換為123-456-7890的方法,因為電話號碼通常在美國格式化。

$areacode = substr($phone, 0, 3);
$prefix   = substr($phone, 3, 3);
$number   = substr($phone, 6, 4);

echo "$areacode-$prefix-$number";

你也可以用正則表達式來做到這一點:

preg_match("/(\d{3})(\d{3})(\d{4})/",$phone,$matches);
echo "$matches[1]-$matches[2]-$matches[3]";

還有更多方法,但任何一種都可以。

以下代碼還將驗證您的輸入。

preg_match('/^(\d{3})(\d{3})(\d{4})$/', $phone, $matches);

if ($matches) {
    echo(implode('-', array_slice($matches, 1)));
}
else {
    echo($phone); // you might want to handle wrong format another way
}
$p = $phone; 
echo "$p[0]$p[1]$p[2]-$p[3]$p[4]-$p[5]$p[6]$p[7]$p[8]";

最少的函數調用。 :)

echo substr($phone, 0, 3) . '-' . substr($phone, 3, 3) . '-' . substr($phone, 6);

substr()

更多正則表達式:)

$phone = "1234567890";
echo preg_replace('/^(\d{3})(\d{3})(\d{4})$/', '\1-\2-\3', $phone);

如果使用正則表達式,我不會費心創建一個臨時數組來轉換回字符串。 相反,只需告訴preg_replace()在每個三位數序列之后最多進行兩次替換。

作為非正則表達式的替代方案,您可以解析字符串並使用帶有sscanf()vprintf()的占位符重新格式化它。

代碼:(演示

$string = '1234567890';

echo preg_replace('/\d{3}\K/', '-', $string, 2);
// 123-456-7890

或者

vprintf('%s-%s-%s', sscanf($string, '%3s%3s%4s'));
// 123-456-7890

或者

echo implode('-', sscanf($string, '%3s%3s%4s'));
// 123-456-7890

對於這樣一個簡單的任務,涉及一個庫是超級大材小用,但對於更復雜的任務,有可用的庫:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM