Как игнорировать код страны на номере телефона (с + и без) с регулярным выражением - PullRequest
0 голосов
/ 17 мая 2018

Итак, я создаю приложение с регистрацией номера телефона. На странице OTP я хотел бы отобразить номер телефона (введенный пользователем) с разделителем со следующими правилами: (Я из Индонезии, поэтому код моей страны +62)

+628101234567890 -> +62810-1234-5678-90
628101234567890  -> 62810-1234-5678-90
08101234567890   -> 0810-1234-5678-90

Может кто-нибудь, пожалуйста, помогите мне? Спасибо, прежде чем

РЕДАКТИРОВАТЬ: телефонный номер имеет диапазон от 9 до 14 цифр

Ответы [ 3 ]

0 голосов
/ 17 мая 2018
String formatTelephone(String tel) {
    return tel.replace(" ", "")
              .replaceFirst("^(0|\\+?62)(\\d{3})(\\d{4})(\\d4)",
                             "$1$2-$3-$4-")
              .replaceFirst("^(0|\\+?62)(\\d{3})(\\d{4})",
                             "$1$2-$3-");
}

Это займет с начала ^ альтернативу 0 +62 и 62, за которыми следуют группы цифр.Остальное не подставляется.И оригинальный телефон возвращается, скажем, для иностранных номеров.

Поскольку дополнительные меры предосторожности удалены заранее.

^ : start of string, so 99962999 will not match ^62
\\d : digit
X? : optional X
X{3} : XXX
(X|Y|Z) : either X, Y or Z

Добавлен второй replaceFirst

Для работы с 0810-1234-56 по 0810-1234-5678-90 первый метод replaceFirst работает только с более длинным номером.Если заменить, дополнительный - заставляет второй replaceFirst не работать (возвращая только что замененную строку).

0 голосов
/ 17 мая 2018

Может быть, вы могли бы взглянуть на эту форму библиотеки телефона google https://github.com/googlei18n/libphonenumber (если вы кодируете на любом из поддерживаемых языков). Это может помочь вам разобрать и отформатировать числа без написания собственного регулярного выражения

0 голосов
/ 17 мая 2018

Вы можете использовать String :: replaceAll с регулярным выражением ^(.*)(....)(....)(..)$, которое соответствует нескольким группам, например:

String[] phones = {"+628101234567890", "628101234567890", "08101234567890"};
for (String phone : phones) {
    System.out.println(phone.replaceAll("(.*)(....)(....)(..)", "$1-$2-$3-$4"));
}

Выходы

+62810-1234-5678-90
62810-1234-5678-90
0810-1234-5678-90

Вы даже можете использовать это регулярное выражение (.*)(\d{4})(\d{4})(\d{2})

детали

Я хотел бы объяснитьрегулярное выражение с конца вместо начала:

  • (..) последняя группа, которая соответствует 2 символам
  • (....)(....) две группы с 4 символами
  • (.*) а остальные персонажи
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...