Подтвердить что ты не робот

Как отформатировать номер телефона с помощью PhoneNumberUtils?

Как я могу отформатировать номер телефона с помощью PhoneNumberUtils?

Например: 1234567890(123) 456-7890

4b9b3361

Ответ 1

В самом основном:

String formattedNumber = PhoneNumberUtils.formatNumber(unformattedNumber);

Это будет автоматически отформатировать номер в соответствии с правилами для страны, из которой это номер.

Вы также можете форматировать редактируемый текст с помощью:

PhoneNumberUtils.formatNumber(Editable text, int defaultFormattingType);

Посмотрите PhoneNumberUtils дополнительные параметры.

Ответ 2

Я решил использовать версию google (https://github.com/googlei18n/libphonenumber), потому что тогда минимальный SDK может быть ниже (я думаю, что это не в Android SDK до 21).

Используйте что-то вроде этого:

PhoneNumberUtil pnu = PhoneNumberUtil.getInstance();
Phonenumber.PhoneNumber pn = pnu.parse("1234567890", "US");
String pnE164 = pnu.format(pn, PhoneNumberUtil.PhoneNumberFormat.E164);

В Android Studio нужно добавить это в зависимости от build.gradle:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    ...
    compile 'com.googlecode.libphonenumber:libphonenumber:7.2.2'
}

Ответ 4

formatNumber устарел на LOLLIPOP, после этого вам нужно добавить локаль в качестве дополнительного аргумента.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  return PhoneNumberUtils.formatNumber(yourStringPhone,Locale.getDefault().getCountry());
} else {
//Deprecated method
  return PhoneNumberUtils.formatNumber(yourStringPhone); 
}

Ответ 5

Автономное решение для формата сырого телефонного номера, если вы не знаете свою страну и нуждаетесь в поддержке на предварительном леллипопе.

fun formatNumberCompat(rawPhone: String?, countryIso: String = ""): String {
    if (rawPhone == null) return ""

    var countryName = countryIso
    if (countryName.isBlank()) {
        countryName = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            Resources.getSystem().configuration.locales[0].country
        } else {
            Resources.getSystem().configuration.locale.country
        }
    }

    return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        PhoneNumberUtils.formatNumber(rawPhone)
    } else {
        PhoneNumberUtils.formatNumber(rawPhone, countryName)
    }
}