在 PHP 中格式化電話號碼

Minahil Noor 2023年1月30日
  1. PHP 中使用 preg_match() 函式格式化電話號碼
  2. 在 PHP 中使用 sprintf() 函式來格式化電話號碼
在 PHP 中格式化電話號碼

在本文中,我們將討論使用 PHP 格式化電話號碼的不同方法。我們會將電話號碼的格式從+13335092344 更改為 333-509-2344。

PHP 中使用 preg_match() 函式格式化電話號碼

我們可以使用內建函式 preg_match() 來格式化電話號碼。這個函式從一個字串中搜尋指定的模式。使用該函式的正確語法如下。

preg_match($pattern, $inputString, $matches, $flag, $offset);

內建函式 preg_match() 有五個引數。其詳細引數如下

引數 說明
$pattern 強制 它是我們要在給定的字串中檢查的模式。
$inputString 強制 它是我們要搜尋給定模式的字串。
$matches 可選 如果給定了這個引數,那麼函式將匹配過程的結果儲存在其中。
$flags 可選 該引數有兩個選項。PREG_OFFSET_CAPTUREPREG_UNMATCHED_AS_NULL。你可以閱讀它的描述這裡
$offset 可選 它告訴函式從哪裡開始匹配過程。通常情況下,搜尋從頭開始。

這個函式返回一個布林變數。如果給定的模式存在,它就返回 true。在提取數字後,我們將以所需的格式列印它們。

下面的程式顯示了我們使用 PHP preg_match() 函式來格式化電話號碼的方法。

<?php 
$number = '+12333509234';
echo("The original number is $number.\n");
if(  preg_match( '/^\+\d(\d{3})(\d{3})(\d{4})$/', $number,  $matches ) )
{
    $result = $matches[1] . '-' .$matches[2] . '-' . $matches[3];
}
echo("The formatted number is $result.");
?> 

我們使用/^\+\d(\d{3})(\d{3})(\d{4})$/模式從字串中提取號碼。這個模式的解釋如下。

  • ^是匹配字串開頭的符號。
  • \+ 匹配字串中的++ 是 PHP 中的特殊字元,用於匹配前面模式的一次或多次。因此,我們需要在+ 之前加上\來轉義這個特殊字元。
  • \d 用來匹配 0-9 的數字。d/d{3} 表示它將匹配三個連續的數字。

輸出:

The original number is +12333509234.
The formatted number is 233-350-9234. 

在 PHP 中使用 sprintf() 函式來格式化電話號碼

我們也可以使用 sprintf() 函式來格式化 PHP 中的電話號碼。這個函式給出了幾種格式化字串的模式。我們將使用 substr() 函式提取幾個字串中的數字。之後,我們將使用 sprintf() 函式將這些字串組合成所需的格式。使用該函式的正確語法如下。

sprintf($formatString, $string1, $string2, ..., $stringN)

sprintf() 函式接受 N+1 個引數。其引數的詳細情況如下

引數 說明
$formatString 強制 它是將被應用到給定字串的格式。
$string1, $string2, $stringN 強制 它是我們要格式化的字串。至少必須有一個字串。

函式返回格式化後的字串。我們將使用格式%s-%s-%s 將數字字串組合在一起。將兩個字串組合在一起的程式如下。

<?php 
$number = '+12333509234';
echo("The original number is $number.\n");
$result = sprintf("%s-%s-%s",
              substr($number, 2, 3),
              substr($number, 5, 3),
              substr($number, 8));
echo("The formatted number is $result.");
?> 

輸出:

The original number is +12333509234.
The formatted number is 233-350-9234.

相關文章 - PHP Regex