国際電話番号を解析、フォーマット、保存、検証するための PHP ライブラリ。このライブラリは、Google の libphonenumber に基づいています。
現在、PHP バージョン 7.4 から PHP 8.4 がサポートされています。
PECL mbstring 拡張子が必要です。
ライブラリをインストールするには、composer を使用することをお勧めします。
composer require giggsey/libphonenumber-for-php
他の PSR-4 準拠のオートローダーも使用できます。
Composer を使用しない場合は、giggsey/locale など、このプロジェクトに含まれる依存関係も必ずロードしてください。
コアの PhoneNumber Util 機能のみを利用したい場合は、はるかに小さいパッケージ サイズを提供する giggsey/libphonenumber-for-php-lite を使用できます。
オンライン デモが利用可能で、ソースは giggsey/libphonenumber-example にあります。
getNumberType
- 数値自体に基づいて数値のタイプを取得します。固定回線、モバイル、フリーダイヤル、プレミアム料金、共有コスト、VoIP、および個人番号を区別できること (可能な場合は常に)。isNumberMatch
- 2 つの数値が同じであるかどうかの信頼レベルを取得します。getExampleNumber
/ getExampleNumberByType
- すべての国/地域に有効な電話番号の例を、必要な電話番号の例を指定するオプションとともに提供します。isValidNumber
- 長さとプレフィックス情報を使用して、地域の電話番号を完全に検証します。PhoneNumberOfflineGeocoder
- 電話番号に関連する地理情報を提供します。PhoneNumberToTimeZonesMapper
- 電話番号に関連するタイムゾーン情報を提供します。PhoneNumberToCarrierMapper
- 電話番号に関連する通信事業者情報を提供します。 このライブラリは、Google と同じバージョン番号に従おうとします。 Google からの次のリリースまで待てない重大な問題を修正するために必要な追加リリースが存在する可能性があります。
これは、このプロジェクトがセマンティック バージョニングに準拠せず、代わりに Google のバージョン ポリシーに従う可能性があることを意味します。その結果、メジャー バージョンのジャンプには、実際には下位互換性のない変更が含まれていない可能性があります。このようなリリースのリリース ノートをお読みください。
Google は、バージョニング ガイドに記載されているセマンティック バージョニングに従ってバージョンをリリースしようとしています。
スイスの電話番号を表す文字列があるとします。これは、PhoneNumber オブジェクトに解析/正規化する方法です。
$ swissNumberStr = " 044 668 18 00 " ;
$ phoneUtil = libphonenumber PhoneNumberUtil :: getInstance ();
try {
$ swissNumberProto = $ phoneUtil -> parse ( $ swissNumberStr , " CH " );
var_dump ( $ swissNumberProto );
} catch ( libphonenumber NumberParseException $ e ) {
var_dump ( $ e );
}
この時点で、swissNumberProto には次のものが含まれています。
class libphonenumberPhoneNumber#9 (7) {
private $countryCode =>
int(41)
private $nationalNumber =>
double(446681800)
private $extension =>
NULL
private $italianLeadingZero =>
NULL
private $rawInput =>
NULL
private $countryCodeSource =>
NULL
private $preferredDomesticCarrierCode =>
NULL
}
次に、数値が有効かどうかを検証してみましょう。
$ isValid = $ phoneUtil -> isValidNumber ( $ swissNumberProto );
var_dump ( $ isValid ); // true
以下に示すように、このフォーマット方法でサポートされているフォーマットがいくつかあります。
// Produces "+41446681800"
echo $ phoneUtil -> format ( $ swissNumberProto , libphonenumber PhoneNumberFormat :: E164 );
// Produces "044 668 18 00"
echo $ phoneUtil -> format ( $ swissNumberProto , libphonenumber PhoneNumberFormat :: NATIONAL );
// Produces "+41 44 668 18 00"
echo $ phoneUtil -> format ( $ swissNumberProto , libphonenumber PhoneNumberFormat :: INTERNATIONAL );
別の国からダイヤルするときの番号の形式を選択することもできます。
// Produces "011 41 44 668 1800", the number when it is dialled in the United States.
echo $ phoneUtil -> formatOutOfCountryCallingNumber ( $ swissNumberProto , " US " );
// Produces "00 41 44 668 18 00", the number when it is dialled in Great Britain.
echo $ phoneUtil -> formatOutOfCountryCallingNumber ( $ swissNumberProto , " GB " );
$ phoneUtil = libphonenumber PhoneNumberUtil :: getInstance ();
$ swissNumberProto = $ phoneUtil -> parse ( " 044 668 18 00 " , " CH " );
$ usNumberProto = $ phoneUtil -> parse ( " +1 650 253 0000 " , " US " );
$ gbNumberProto = $ phoneUtil -> parse ( " 0161 496 0000 " , " GB " );
$ geocoder = libphonenumbergeocoding PhoneNumberOfflineGeocoder :: getInstance ();
// Outputs "Zurich"
echo $ geocoder -> getDescriptionForNumber ( $ swissNumberProto , " en_US " );
// Outputs "Zürich"
echo $ geocoder -> getDescriptionForNumber ( $ swissNumberProto , " de_DE " );
// Outputs "Zurigo"
echo $ geocoder -> getDescriptionForNumber ( $ swissNumberProto , " it_IT " );
// Outputs "Mountain View, CA"
echo $ geocoder -> getDescriptionForNumber ( $ usNumberProto , " en_US " );
// Outputs "Mountain View, CA"
echo $ geocoder -> getDescriptionForNumber ( $ usNumberProto , " de_DE " );
// Outputs "미국" (Korean for United States)
echo $ geocoder -> getDescriptionForNumber ( $ usNumberProto , " ko-KR " );
// Outputs "Manchester"
echo $ geocoder -> getDescriptionForNumber ( $ gbNumberProto , " en_GB " );
// Outputs "영국" (Korean for United Kingdom)
echo $ geocoder -> getDescriptionForNumber ( $ gbNumberProto , " ko-KR " );
$ shortNumberInfo = libphonenumber ShortNumberInfo :: getInstance ();
// true
var_dump ( $ shortNumberInfo -> isEmergencyNumber ( " 999 " , " GB " ));
// true
var_dump ( $ shortNumberInfo -> connectsToEmergencyNumber ( " 999 " , " GB " ));
// false
var_dump ( $ shortNumberInfo -> connectsToEmergencyNumber ( " 911 " , " GB " ));
// true
var_dump ( $ shortNumberInfo -> isEmergencyNumber ( " 911 " , " US " ));
// true
var_dump ( $ shortNumberInfo -> connectsToEmergencyNumber ( " 911 " , " US " ));
// false
var_dump ( $ shortNumberInfo -> isEmergencyNumber ( " 911123 " , " US " ));
// true
var_dump ( $ shortNumberInfo -> connectsToEmergencyNumber ( " 911123 " , " US " ));
$ phoneUtil = libphonenumber PhoneNumberUtil :: getInstance ();
$ swissNumberProto = $ phoneUtil -> parse ( " 798765432 " , " CH " );
$ carrierMapper = libphonenumber PhoneNumberToCarrierMapper :: getInstance ();
// Outputs "Swisscom"
echo $ carrierMapper -> getNameForNumber ( $ swissNumberProto , " en " );
$ phoneUtil = libphonenumber PhoneNumberUtil :: getInstance ();
$ swissNumberProto = $ phoneUtil -> parse ( " 798765432 " , " CH " );
$ timeZoneMapper = libphonenumber PhoneNumberToTimeZonesMapper :: getInstance ();
// returns array("Europe/Zurich")
$ timeZones = $ timeZoneMapper -> getTimeZonesForNumber ( $ swissNumberProto );
このライブラリは、Google の libphonenumber の電話番号メタデータを使用します。このライブラリが意図したとおりに動作している場合は、Google プロジェクトの Java バージョンと同じ結果が得られるはずです。
電話番号が間違った結果を返していると思われる場合は、まずオンライン デモを通じて libphonenumber を使用してテストしてください。このプロジェクトと同じ結果が返され、エラーであると思われる場合は、libphonenumber プロジェクトの問題として報告してください。
Google のオンライン デモで libphonenumber-for-php デモと異なる結果が得られる場合は、ここで問題を提起してください。
通常、このリポジトリには常に最新のデータ メタデータが含まれるため、データを生成する必要はありません。
データを生成する必要がある場合、コマンドは Phing によって提供されます。すべての開発コンポーザーの依存関係がインストールされていることを確認してから、次を実行します。
vendor/bin/phing compile
このコンパイル プロセスでは、METADATA-VERSION.txt で指定されたバージョンで libphonenumber プロジェクトのクローンが作成されます。
このプロジェクトは、PHPUnit Bridge を使用して、サポートされている PHP バージョンの互換性を維持します。
テストをローカルで実行するには、 ./phpunit
スクリプトを実行します。
libphonenumber-for-php をフレームワークに統合する他のパッケージも存在します。
フレームワーク | パッケージ |
---|---|
シンフォニー | 電話番号バンドル |
ララベル | Laravelフォン |
Yii2 | 電話入力 |
コハナ | 電話番号 |
タイポ3 | TYPO3 電話の内線番号 |
これらのパッケージはサードパーティによって提供されており、その品質は保証されません。