이 라이브러리는 약간 더 간단한 인터페이스를 갖춘 Google libphonenumber
의 사전 컴파일된 버전입니다. 최소한의 공간만 차지합니다. npmjs에서 사용할 수 있는 가장 작은 libphonenumber 기반 라이브러리이며 종속성이 없습니다.
libphonenumber와 달리 텍스트에서 전화번호를 찾는 findNumbers( )
함수가 포함되어 있습니다.
TypeScript 입력은 패키지 내에서 제공됩니다.
libphonenumber v8.13.47을 사용합니다.
v3:
API 변경(이전 버전과 호환되는 ABI 포함)
ESM 내보내기 추가
v4:
parsePhoneNumber
의 두 번째 인수는 객체입니다.
반환 값은 v3의 toJSON( )
과 같습니다.
예: 지역 코드 문자열 대신 { regionCode: 'SE' }
생성자 없음
반환된 객체에 함수가 없습니다.
오류가 발생하지 않습니다.
API를 훨씬 더 깔끔하게 변경했습니다.
이전 버전과 호환되지 않지만 다음을 제외하면 v3와 같습니다.
v5:
중단된 Node 12 지원
v6:
중단된 Node 16 지원
v7:
텍스트에서 전화번호를 찾는 findNumbers( )
기능이 추가되었습니다.
짧은 숫자에 대한 지원이 추가되었습니다.
이 라이브러리는 미리 컴파일되어 있으므로 클로저 컴파일러에 의존하지 않으며 시작 시 로드할 필요가 없습니다. 이렇게 하면 라이브러리가 더 빨라지고 많은 공간이 절약됩니다. 이는 또한 이 라이브러리가 모든 webpack
프로젝트에서 사용하기 쉽다는 것을 의미합니다(또는 브라우저에서 실행하기 위해 다른 수단을 사용하는 경우).
Google의 libphonenumber
사용하거나 모방한 모든 인기 전화번호 중에서 google-libphonenumber
및 libphonenumber-js
만이 예제가 포함된 적절한 README를 제공합니다. 이 벤치마크를 처음 수행한 이후 변경되었을 수 있습니다 .
라이브러리는 로드( require()
)가 빠르고, 처음 분석과 연속 구문 분석이 빨라야 합니다. node_modules
부풀려서는 안 되며, 가능하다면 메모리 공간이 작아야 합니다.
다음은 라이브러리를 로딩한 후 전화번호를 파싱하고 다시 한 번 테스트 프로그램을 수행한 결과이다. 각 라이브러리에 대해 100번 호출되었으며 평균값이 여기에 표시됩니다. 처음에 전화번호를 구문 분석하는 것은 정규 표현식 등을 컴파일/최적화하기 때문에 속도가 느려질 수 있습니다. 전화번호를 두 번째로 구문 분석하면 해당 프로세스 내에서 향후 모든 구문 분석 속도가 표시됩니다.
행동 | 멋진 전화번호 2.56.0 (lib 8.12.29) | google-lib전화번호 3.2.22 (lib 8.12.27) | libphonenumber-js 1.9.23 (lib -) |
---|---|---|---|
처음으로 라이브러리 로드 | 11.0ms ✅ | 29.67ms | 32.87ms |
첫 번째 전화번호 구문 분석 | 4.3ms | 4.01ms | 3.43ms ✅ |
⇒ 첫 번째 숫자 로드 + 구문 분석 | 15.3ms ✅ | 33.68ms | 36.3ms |
두 번째 전화번호 분석 | 0.78ms ✅ | 0.97ms | 0.92ms |
메모리 사용량 증가 | 512만 ✅ | 999만 | 586만 |
node_modules 크기 | 296K ✅ | 600K | 7.6M |
node_modules 파일 | 8 | 7 ✅ | 653 |
import { parsPhoneNumber } from 'awesome-phonenumber'const pn =parsePhoneNumber( '0707123456', { 지역 코드: 'SE' } );// 또는 e164 형식:const pn =parsePhoneNumber( '+46707123456' );// pn은 이제 다음과 같습니다:const pn = {valid: true,number: {input: '0707123456',e164: '+46707123456',국제: '+46 70 712 34 56',국가: '070-712 34 56',rfc3966: '전화:+46-70-712-34-56',중요 : '707123456',},가능성: 'is-possible',regionCode: 'SE',possible: true,shortPossible: false,shortValid: false,canBeInternationallyDialled: true,type: 'mobile',countryCode: 46,typeIsMobile: true, typeIsFixedLine: false,};
반환 유형은 ParsedPhoneNumberValid
또는 ParsedPhoneNumberInvalid
중 하나인 ParsedPhoneNumber
입니다. valid
속성은 구문 분석이 성공했는지 여부를 식별하여 어떤 유형이 반환되는지를 식별합니다.
성공적인 구문 분석의 형식은 다음과 같습니다.
인터페이스 ParsedPhoneNumberValid {유효: true;번호: {입력: 문자열;국제: 문자열;국가: 문자열;e164: 문자열;rfc3966: 문자열;중요: 문자열;};가능성: PhoneNumberPossibility; // 문자열 통합, 아래 참조regionCode: string;possible: boolean;shortPossible: boolean;shortValid: boolean;canBeInternationallyDialled: boolean;type: PhoneNumberTypes; // 문자열 결합, belowcountryCode: number;typeIsMobile: boolean;typeIsFixedLine: boolean;}을 참조하세요.
숫자를 구문 분석하지 못했거나 다른 오류가 발생한 경우 반환 유형은 다음과 같습니다.
인터페이스 ParsedPhoneNumberInvalid {유효: false;가능: false;가능성: '유효하지 않음';shortPossible: 부울;shortValid: 부울;오류?: 알 수 없음;};
잘못된(유효하지 않은) 전화번호도 해당 지역에서는 여전히 유효한 단축 번호 일 수 있습니다.
'awesome-phonenumber'에서 {parsePhoneNumber,findNumbers,getNumberFrom,getExample,getCountryCodeForRegionCode,getRegionCodeForCountryCode,getSupportedCallingCodes,getSupportedRegionCodes,getAsYouType,}} 가져오기
parsePhoneNumber( phoneNumber, { regionCode: string } )
위에 설명된 대로 전화번호를 구문 분석합니다.
첫 번째 인수는 국내 또는 국제 (e164, 즉 +
접두사가 붙음) 형식으로 구문 분석할 전화번호입니다. 국가 형식인 경우 두 번째 인수는 regionCode
문자열 속성을 포함해야 합니다(예: 스웨덴의 경우 'SE', 스위스의 경우 'CH' 등).
텍스트에서 전화번호를 찾으려면(추출) findNumbers( )
사용하세요.
import { findNumbers } from 'awesome-phonenumber'const text = '내 전화번호는 +46 707 123 456입니다. 그렇지 않으면 +33777777777로 전화하세요.';const number = findNumbers( text );
반환된 번호 목록은 다음과 같은 PhoneNumberMatch
유형입니다.
인터페이스 PhoneNumberMatch{텍스트: 문자열; // 원시 문자열foundphoneNumber: object; //parsePhoneNumber()의 결과와 동일start: number; // textend의 시작 오프셋: number; // 텍스트의 끝 오프셋}
findNumbers( text, options )
에 대한 두 번째 옵션 인수는 다음 형식으로 제공될 수 있습니다.
인터페이스 FindNumbersOptions{defaultRegionCode?: 문자열;leniency?: FindNumbersLeniency;maxTries?: 숫자;}
여기서 FindNumbersLeniency
'valid'
또는 'possible'
의 열거형입니다. 기본값은 'valid'
이며 유효한 전화번호만 검색됨을 의미합니다. 이것이 'possible'
으로 설정되면 가능한(그러나 유효하지 않은) 전화번호도 검색됩니다.
defaultRegionCode
설정할 수 있습니다(예: 스웨덴의 경우 'SE'
). 이 경우 해당 지역에 속하는 국가 형식(예: +
접두사 없음)의 전화번호가 검색됩니다.
매우 큰 텍스트의 경우 maxTries
찾으려고 시도 할 최대 전화번호 수를 설정합니다(실제로 찾을 필요는 없음).
import { parsPhoneNumber, getNumberFrom } from 'awesome-phonenumber'const pn = parsPhoneNumber( '0707654321', { 지역 코드: 'SE' } );if ( pn.valid ) {const fromJp = getNumberFrom( pn, 'JP' );/ / fromJp는 일본에서 전화할 번호입니다:fromJp.number === "010 46 70 765 43 21";}
getNumberFrom
의 반환 값은 PhoneNumberFromValid
또는 PhoneNumberFromInvalid
인 PhoneNumberFrom
입니다.
PhoneNumberFromValid
는 다음과 같이 정의됩니다.
인터페이스 PhoneNumberFromValid{유효: true;번호: 문자열;}
PhoneNumberFromInvalid
는 다음과 같이 정의됩니다.
인터페이스 PhoneNumberFromInvalid{유효: false;오류?: 알 수 없음;}
때로는 특정 국가(및 특정 유형의 전화번호)에 대한 서식이 지정된 예제 전화번호를 표시하려고 합니다. 이를 위해 getExample
함수가 사용됩니다.
import { getExample } from 'awesome-phonenumber'getExample( 지역 코드[,phoneNumberType] ); // 파싱된 전화번호
phoneNumberType
은 위에 정의된 유형 중 하나입니다.
import { getExample } from 'awesome-phonenumber'// 스웨덴 전화번호 예시 가져오기const example = getExample( 'SE' ); // ParsedPhoneNumberValidconst exampleMobile = getExample( 'SE', 'mobile' ); // 구문 분석된PhoneNumberValidexample.number.e164; // 예: '+468123456'exampleMobile.number.e164; // 예: '+46701234567'exampleMobile.number.national; // 예: '070 123 45 67'
2자리 ISO 3166-1 지역 코드(예: 스웨덴의 경우 'SE')와 해당 국가 전화 코드 사이에 변환 기능이 있습니다.
import {getCountryCodeForRegionCode,getRegionCodeForCountryCode,getSupportedCallingCodes,getSupportedRegionCodes,} from 'awesome-phonenumber'getCountryCodeForRegionCode( RegionCode ); // -> countryCodegetRegionCodeForCountryCode( countryCode ); // -> 지역 코드
getCountryCodeForRegionCode( 'SE' ); // -> 46getRegionCodeForCountryCode( 46 ); // -> 'SE'
getSupportedCallingCodes( ); // -> [ 코드 호출... ]
getSupportedRegionCodes( ); // -> [ 지역 코드... ]
API는 때때로 enum을 사용하는 PhoneNumber
클래스로 구성됩니다. 이것들은 다음과 같습니다:
PhoneNumberTypes =|를 입력하세요. '고정선'| '고정선 또는 모바일'| '모바일'| '호출기'| '개인번호'| '프리미엄 요금'| '공유 비용'| '무료'| '안'| '보이프'| '알려지지 않은'
PhoneNumberPossibility =|를 입력하세요. '가능하다'| '잘못된 국가 코드'| '너무 길다'| '너무 짧음'| '알려지지 않은'
'국제''국가''e164''rfc3966''중요한'
getAsYouType()
사용하여 AsYouType
클래스를 생성하여 입력되는 전화번호 형식을 지정할 수 있습니다.
import { getAsYouType } from 'awesome-phonenumber'const ayt = getAsYouType( 'SE' );
반환된 클래스 인스턴스에는 다음과 같은 메서드가 있습니다.
// 숫자 끝에 문자를 추가합니다ayt.addChar( nextChar: string );// 현재 형식화된 숫자를 가져옵니다ayt.number( );// 마지막 문자를 제거합니다ayt.removeChar( );// 전체 숫자를 새 번호(또는 정의되지 않은 경우 빈 번호)ayt.reset( number?: string );// 현재 번호를 나타내는 ParsedPhoneNumber 객체를 가져옵니다ayt.getPhoneNumber( );
getPhoneNumber( )
제외한 위의 모든 함수는 현재 형식화된 숫자를 문자열로 반환합니다.
import { getAsYouType } from 'awesome-phonenumber'const ayt = getAsYouType( 'SE' );ayt.addChar( '0' ); // -> '0'ayt.addChar( '7' ); // -> '07'ayt.addChar( '0' ); // -> '070'ayt.addChar( '7' ); // -> '070 7'ayt.addChar( '1' ); // -> '070 71'ayt.addChar( '2' ); // -> '070 712'ayt.addChar( '3' ); // -> '070 712 3'ayt.addChar( '4' ); // -> '070 712 34'ayt.addChar( '5' ); // -> '070 712 34 5'ayt.addChar( '6' ); // -> '070 712 34 56'ayt.removeChar( ); // -> '070 712 34 5'ayt.addChar( '7' ); // -> '070712 34 57'