국제 전화번호 구문 분석, 형식화, 저장 및 유효성 검사를 위한 PHP 라이브러리입니다. 이 라이브러리는 Google의 libphonenumber를 기반으로 합니다.
현재 PHP 버전 7.4~PHP 8.4가 지원됩니다.
PECL mbstring 확장이 필요합니다.
라이브러리를 설치하려면 작곡가를 사용하는 것이 좋습니다.
composer require giggsey/libphonenumber-for-php
다른 PSR-4 호환 자동 로더를 사용할 수도 있습니다.
작곡가를 사용하지 않는 경우 giggsey/locale과 같이 이 프로젝트에 있는 모든 종속성도 로드해야 합니다.
핵심 PhoneNumber Util 기능만 사용하려는 경우 훨씬 작은 패키지 크기를 제공하는 giggsey/libphonenumber-for-php-lite를 사용할 수 있습니다.
온라인 데모가 제공되며 소스는 giggsey/libphonenumber-example에서 찾을 수 있습니다.
getNumberType
- 숫자 자체를 기반으로 숫자 유형을 가져옵니다. 유선, 휴대폰, 무료, 할증 요금, 공유 비용, VoIP 및 개인 번호(가능한 경우)를 구별할 수 있습니다.isNumberMatch
- 두 숫자가 동일할 수 있는지 여부에 대한 신뢰 수준을 가져옵니다.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를 프레임워크에 통합하는 다른 패키지가 있습니다.
뼈대 | 패키지 |
---|---|
심포니 | 전화번호번들 |
라라벨 | 라라벨 전화 |
Yii2 | 전화입력 |
코하나 | 전화번호 |
오타3 | TYPO3 전화 확장 |
이러한 패키지는 제3자에 의해 제공되므로 품질이 보장되지 않습니다.