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 에서 제공하는 일부 기능을 보았습니다 .

이것은 더 많은 유틸리티 기능을 제공 하고 전화 번호 형식 지정, 구문 분석 및 유효성 검사에 대한 대부분의 응용 프로그램 요구 사항을 처리 하는 풍부한 라이브러리입니다 .

항상 그렇듯이 소스 코드는 GitHub 에서 사용할 수 있습니다 .

Junit footer banner