Разобрать номер с помощью Regex с не захватывающей группой - PullRequest
0 голосов
/ 19 мая 2009

Я пытаюсь разобрать номер телефона с помощью регулярных выражений. Я хочу получить строку с номером телефона, используя такую ​​функцию:

string phoneRegex = @"^([+]|00)(\d{2,12}(?:\s*-*)){1,5}$";
string formated = Regex.Match(e.Value.ToString(), phoneRegex).Value;

Как видите, я пытаюсь использовать группу без захвата (?: \ S * - *), но я делаю что-то не так.

Ожидаемый результат должен быть:

вход (e.Value): +48 123 234 344 или +48 123234344 или +48 123-234-345

вывод: + 48123234344

Заранее спасибо за любые предложения.

Ответы [ 2 ]

2 голосов
/ 19 мая 2009

Regex.Match не изменит строку для вас; это будет просто соответствовать этому. Если у вас есть строка телефонного номера и вы хотите отформатировать ее, удалив ненужные символы, вам нужно использовать метод Regex.Replace:

// pattern for matching anything that is not '+' or a decimal digit
string replaceRegex = @"[^+\d]";
string formated = Regex.Replace("+48 123 234 344", replaceRegex, string.Empty);

В моем примере номер телефона жестко запрограммирован, но только для демонстрации.

В качестве примечания; регулярное выражение, которое вы используете в приведенном выше примере кода, предполагает, что код страны состоит из 2 цифр; это может быть не так. В Соединенных Штатах есть однозначный код (1), а во многих странах есть трехзначные коды (возможно, есть также страны с большим количеством цифр, чем эта?).

0 голосов
/ 19 мая 2009

Это должно работать:

Match m = Regex.Match(s, @"^([+]|00)\(?(\d{3})\)?[\s\-]?(\d{3})\-?(\d{4})$");
return String.Format("{0}{1}{2}{4}", m.Groups[1], m.Groups[2], m.Groups[3], m.Groups[3]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...