как с помощью RegExp заменить номер телефона?

например, у меня есть такой номер в String: +77777777777, я хочу вывести этот номер как +7 (777) 777 77 77


Ответы (1 шт):

Автор решения: MiT

Алгоритм:

  1. Меняем NNN на (NNN) и добавляем пробелы для первой части.
  2. Делаем пробелы для второй части.

Только RegEx:

void main() {
  String s = "+77777777777";
  print(s);

  s = s.replaceRange(2, 5,
          s.replaceAllMapped(
            RegExp(r"^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$"),
            (m) => " (${m.group(3)}) ",
          ))
      .replaceAllMapped(
        RegExp(r"(\d{2})(?=(\d{2})+(?!\d))"),
        (match) => "${match.group(0)} ",
      );

  print(s);
}

Через цикл и RegEx:

void main() {
  String s = "+77777777777";
  print(s);

  String temp = "";

  for (int i = 0; i < s.length; i++) {
    if (i == 2)
      temp += " (${s[i]}";
    else if (i == 4)
      temp += "${s[i]}) ";
    else
      temp += s[i];
  }

  s = temp.replaceAllMapped(
    RegExp(r"(\d{2})(?=(\d{2})+(?!\d))"),
    (match) => "${match.group(0)} ",
  );

  print(s);
}
→ Ссылка