2014-01-27 4 views
5

Могу ли я определить, введен ли пользователь номер телефона, который можно безопасно отформатировать в E164?Конвертировать в E164 только по возможности?

Для Германии это требует, чтобы пользователь начал свою запись с кода местной зоны. Например, 123456 может быть номером абонента в его городе, но его нельзя отформатировать в E164, потому что мы не знаем его код местной зоны. Тогда я хотел бы оставить запись такой, какой она есть. Напротив, вход 089123456 не зависит от кода области и может быть отформатирован в E164, потому что мы знаем, что он из Германии, и мы можем преобразовать его в +4989123456.

ответ

4

Вы можете просто преобразовать свой номер в E164 с помощью libphonenumber и после проверки на преобразование, если обе строки одинаковы или нет. Если они одинаковы, число не может быть отформатировано, иначе номер, который вы получите из библиотеки, будет отформатирован в E164.

Вот как вы можете конвертировать

PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); 
String formattedNumber = phoneUtil.format(inputNumber, PhoneNumberFormat.E164); 

Наконец сравнить formattedNumber с inputNumber

+1

Я не думаю, что это правильно, или это по крайней мере неправильно понимает вопрос. – jberryman

0

Это выглядит так, как будто вы должны будете играть с isValidNumber и isPossibleNumber для вашего случая. format, безусловно, не гарантирует вам что-то действительно доступное, см. javadocs. Это также предлагается demo, где форматирование не отображается, если isValidNumber является ложным.

Я также занимаюсь этим FWIW. В контексте номеров в США: проблема заключается в том, что я хотел бы проанализировать с помощью isPossibleNumber, чтобы быть как можно мягче, и сохранить номер в E164. Однако тогда мы принимаем, например. +15551212. Сама эта строка даже проходит isPossibleNumber, несмотря на то, что ясно (я думаю) не поддается никому.