[android] 전화번호 포맷 검사

이메일처럼 Patterns.EMAIL_ADDRESS.matcher(email).matches() 이렇게 하면 되는 줄 알았는데, 아니었다. Patterns.PHONE.matcher(email).matches() 로 하면 무조건 true가 넘어온다.

그러다 찾은게 https://github.com/googlei18n/libphonenumber 이다. 온라인으로도 만들어놔서 https://libphonenumber.appspot.com 에 가서 검사할 수 있다.

이렇게 입력하면
이런 결과를 얻을 수 있다.

안드로이드 스튜디오용은 https://github.com/googlei18n/libphonenumber/wiki/Android-Studio-setup 이렇게 설정하면 된다.

테스트를 돌려보니 이렇게 결과가 나온다.

@Test
fun checkPhoneNumber1() {
  val util = PhoneNumberUtil.getInstance()
  val country = Locale.getDefault().country
  
  assertTrue(util.isValidNumber(util.parseAndKeepRawInput("01012345678", country)))
  assertTrue(util.isValidNumber(util.parseAndKeepRawInput("010-1234-5678", country)))
  assertTrue(util.isValidNumber(util.parseAndKeepRawInput("+821012345678", country)))
  assertTrue(util.isValidNumber(util.parseAndKeepRawInput("821012345678", country)))
  assertTrue(util.isValidNumber(util.parseAndKeepRawInput("+8201012345678", country)))
  assertTrue(util.isValidNumber(util.parseAndKeepRawInput("8201012345678", country)))
  assertTrue(util.isValidNumber(util.parseAndKeepRawInput("+82 010-1234-5678", country)))
  assertTrue(util.isValidNumber(util.parseAndKeepRawInput("82 010-1234-5678", country)))
  assertTrue(util.isValidNumber(util.parseAndKeepRawInput("+82 10-1234-5678", country)))
  assertTrue(util.isValidNumber(util.parseAndKeepRawInput("82 10-1234-5678", country)))
  assertTrue(util.isValidNumber(util.parseAndKeepRawInput("010-123-5678", country)))
  assertTrue(util.isValidNumber(util.parseAndKeepRawInput("0101235678", country)))
  assertTrue(util.isValidNumber(util.parseAndKeepRawInput("101235678", country)))
  assertTrue(util.isValidNumber(util.parseAndKeepRawInput("011-1234-5678", country)))
  assertTrue(util.isValidNumber(util.parseAndKeepRawInput("01112345678", country)))
  assertTrue(util.isValidNumber(util.parseAndKeepRawInput("01612345678", country)))
  
  assertFalse(util.isValidNumber(util.parseAndKeepRawInput("12345678", country)))
  assertFalse(util.isValidNumber(util.parseAndKeepRawInput("010-12-5678", country)))
  assertFalse(util.isValidNumber(util.parseAndKeepRawInput("010125678", country)))
}