PHP で電話番号をフォーマットする

Minahil Noor 2023年1月30日
  1. 関数 preg_match() を用いて PHP で電話番号を書式設定する
  2. 関数 sprintf() を用いた PHP での電話番号の書式設定
PHP で電話番号をフォーマットする

この記事では、PHP を使って電話番号をフォーマットするさまざまな方法について説明します。今回は、+13335092344 から 333-509-2344 までの電話番号を書式設定します。

関数 preg_match() を用いて PHP で電話番号を書式設定する

電話番号の書式設定には、組み込みの関数 preg_match() を利用することができます。この関数は文字列から指定されたパターンを検索します。この関数を利用するための正しい構文は以下の通りです。

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

組み込み関数 preg_match() は 5つのパラメータを持ちます。パラメータの詳細は以下の通りです。

パラメータ 説明
$pattern 強制的 これは与えられた文字列の中でチェックしたいパターンです。
$inputString 強制的 与えられたパターンを検索したい文字列です。
$matches 任意 このパラメータが与えられた場合、この関数はマッチング処理の結果を格納します。
$flags 任意 このパラメータには 2つのオプションがあります。PREG_OFFSET_CAPTUREPREG_UNMATCHED_AS_NULL の 2つのオプションがあります。このパラメータの説明はこちらを参照してください。
$offset 任意 どこからマッチング処理を開始するかの機能を伝えます。通常、検索は最初から始まります。

この関数はブール値を返します。与えられたパターンが存在すれば真を返します。数値を抽出した後、必要な形式で出力します。

下のプログラムは、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 の特殊文字で、先ほどのパターンに 1 回以上マッチします。そのため、この特殊文字をエスケープするには + の前に \ をつける必要があります。
  • 0 から 9 までの一桁の数字にマッチさせるには \d を使用します。\d{3} は、3つの連続した数字にマッチすることを意味しています。

出力:

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

関数 sprintf() を用いた PHP での電話番号の書式設定

PHP で電話番号を書式設定するには、sprintf() 関数を使用することもできます。この関数は文字列をフォーマットするためのいくつかのフォーマットパターンを提供しています。substr() 関数を用いて、いくつかの文字列から電話番号を抽出します。その後、sprintf() 関数を用いてこれらの文字列を必要な形式に結合します。この関数を使用するための正しい構文は以下の通りです。

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

関数 sprintf() は N+1 個のパラメータを受け付ける。パラメータの詳細は以下の通りです。

パラメータ 説明
$formatString 強制的 与えられた文字列に適用されるフォーマットです。
$string1$string2$stringN 強制的 フォーマットしたい文字列です。少なくとも 1つの文字列は必須です。

この関数はフォーマットされた文字列を返します。ここでは、%s-%s-%s-%s という形式を用いて数値文字列を結合します。2つの文字列を結合するプログラムは以下の通りです。

<?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