1. 개요
이 빠른 사용방법(예제)에서는 Google의 오픈 소스 라이브러리인 libphonenumber 를 사용하여 Java에서 전화번호를 확인 하는 방법을 알아봅니다 .
2. 메이븐 의존성
먼저 pom.xml 에 이 라이브러리에 대한 의존성을 추가해야 합니다 .
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber</artifactId>
<version>8.12.10</version>
</dependency>
최신 버전 정보는 Maven Central 에서 찾을 수 있습니다 .
이제 이 라이브러리가 제공하는 모든 기능을 사용할 준비가 되었습니다.
3. 전화번호유틸
라이브러리는 전화 번호를 가지고 놀 수 있는 여러 메서드를 제공하는 PhoneNumberUtil 유틸리티 클래스 를 제공합니다.
유효성 검사를 위해 다양한 API를 사용하는 방법에 대한 몇 가지 예를 살펴보겠습니다.
중요한 것은 모든 예제에서 이 클래스의 싱글톤 객체를 사용하여 메서드를 호출한다는 것입니다 .
PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
3.1. isPossibleNumber
P honeNumberUtil#isPossibleNumber 를 사용 하여 특정 국가 코드 또는 지역에 대해 주어진 번호가 가능한지 확인할 수 있습니다 .
예를 들어, 국가 코드가 1인 미국을 가정해 보겠습니다. 주어진 전화번호가 다음과 같은 방식으로 가능한 미국 번호인지 확인할 수 있습니다.
@Test
public void givenPhoneNumber_whenPossible_thenValid() {
PhoneNumber number = new PhoneNumber();
number.setCountryCode(1).setNationalNumber(123000L);
assertFalse(phoneNumberUtil.isPossibleNumber(number));
assertFalse(phoneNumberUtil.isPossibleNumber("+1 343 253 00000", "US"));
assertFalse(phoneNumberUtil.isPossibleNumber("(343) 253-00000", "US"));
assertFalse(phoneNumberUtil.isPossibleNumber("dial p for pizza", "US"));
assertFalse(phoneNumberUtil.isPossibleNumber("123-000", "US"));
}
여기에서 우리 는 전화를 걸 번호를 String 으로 예상하는 지역 을 전달함으로써 이 함수의 다른 변형도 사용했습니다 .
3.2. isPossibleNumberForType
라이브러리는 유선, 모바일, 무료 전화, 음성 메일, VoIP를, 호출기 등의 전화 번호를 다른 종류의 인식 더 많은 .
그것의 유틸리티 메소드 isPossibleNumberForType 은 주어진 숫자가 특정 지역의 주어진 유형에 대해 가능한지 확인합니다.
예를 들어 아르헨티나는 유형에 따라 가능한 길이가 다르기 때문에 아르헨티나를 살펴보겠습니다.
따라서 이를 사용하여 이 API의 기능을 시연할 수 있습니다.
@Test
public void givenPhoneNumber_whenPossibleForType_thenValid() {
PhoneNumber number = new PhoneNumber();
number.setCountryCode(54);
number.setNationalNumber(123456);
assertTrue(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.FIXED_LINE));
assertFalse(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.TOLL_FREE));
number.setNationalNumber(12345678901L);
assertFalse(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.FIXED_LINE));
assertTrue(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.MOBILE));
assertFalse(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.TOLL_FREE));
}
보시다시피 위의 코드는 아르헨티나가 6자리 고정 회선 번호와 11자리 모바일 번호를 허용하는지 확인합니다.
3.3. isAlphaNumber
이 방법은 주어진 전화번호가 325-CARS 와 같이 유효한 영숫자 번호인지 확인하는 데 사용됩니다 .
@Test
public void givenPhoneNumber_whenAlphaNumber_thenValid() {
assertTrue(phoneNumberUtil.isAlphaNumber("325-CARS"));
assertTrue(phoneNumberUtil.isAlphaNumber("0800 REPAIR"));
assertTrue(phoneNumberUtil.isAlphaNumber("1-800-MY-APPLE"));
assertTrue(phoneNumberUtil.isAlphaNumber("1-800-MY-APPLE.."));
assertFalse(phoneNumberUtil.isAlphaNumber("+876 1234-1234"));
}
명확히 하자면, 유효한 영숫자는 시작 부분에 최소 3자리의 숫자를 포함하고 그 뒤에 3개 이상의 알파벳 문자가 와야 합니다. 위의 유틸리티 메서드는 먼저 주어진 입력을 서식에서 제거한 다음 이 조건을 확인합니다.
3.4. 유효숫자
우리가 논의한 이전 API는 전화번호의 길이만을 기준으로 신속하게 전화번호를 확인합니다. 반면에 isValidNumber 는 접두사와 길이 정보를 사용하여 완전한 유효성 검사를 수행합니다 .
@Test
public void givenPhoneNumber_whenValid_thenOK() throws Exception {
PhoneNumber phone = phoneNumberUtil.parse("+911234567890",
CountryCodeSource.UNSPECIFIED.name());
assertTrue(phoneNumberUtil.isValidNumber(phone));
assertTrue(phoneNumberUtil.isValidNumberForRegion(phone, "IN"));
assertFalse(phoneNumberUtil.isValidNumberForRegion(phone, "US"));
assertTrue(phoneNumberUtil.isValidNumber(phoneNumberUtil.getExampleNumber("IN")));
}
여기에서 지역을 지정하지 않았을 때와 지정했을 때도 번호가 검증됩니다.
3.5. isNumberGeographical
이 메서드는 지정된 번호에 연결된 지리 또는 지역이 있는지 확인합니다.
@Test
public void givenPhoneNumber_whenNumberGeographical_thenValid() throws NumberParseException {
PhoneNumber phone = phoneNumberUtil.parse("+911234567890", "IN");
assertTrue(phoneNumberUtil.isNumberGeographical(phone));
phone = new PhoneNumber().setCountryCode(1).setNationalNumber(2530000L);
assertFalse(phoneNumberUtil.isNumberGeographical(phone));
phone = new PhoneNumber().setCountryCode(800).setNationalNumber(12345678L);
assertFalse(phoneNumberUtil.isNumberGeographical(phone));
}
여기 위의 첫 번째 주장에서 지역 코드와 함께 국제 형식의 전화 번호를 제공했으며 메서드는 true를 반환했습니다. 두 번째 주장은 미국의 지역 번호를 사용하고 세 번째 주장은 무료 전화 번호를 사용합니다. 따라서 API는 이 두 가지에 대해 false를 반환했습니다.
4. 결론
이 사용방법(예제)에서는 코드 샘플을 사용하여 전화 번호의 형식을 지정하고 유효성을 검사하기 위해 libphonenumber 에서 제공하는 일부 기능을 보았습니다 .
이것은 더 많은 유틸리티 기능을 제공 하고 전화 번호 형식 지정, 구문 분석 및 유효성 검사에 대한 대부분의 응용 프로그램 요구 사항을 처리 하는 풍부한 라이브러리입니다 .