2015-11-05 1 views
1

мне нужно регулярное выражение для .net, который может извлечь номер телефона из смешанного значения символов, таких как следующие примеры:Validate/извлечь США Телефонные номера с .net регулярное выражение из смешанного значения символов

yyy1-555-555-5555yyy1
yyy555-555-5555yyy1
yyy1 (555) 555-5555yyy1
yyy5555555555yyy1
yyy1- (555) -555-5555yyy1
yyy1 (555) -555-5555yyy1
YYY (555) 555-5555yyy1

картина ^\+?([0-9]+[ -]?){5,}[0-9]+$ кажется очень простой и работает достаточно хорошо, но это не работает со всеми различными способами номер телефона может быть представлена, как показано выше.

Я очень новичок в регулярных выражениях, и, похоже, это может быть очень много, но я был бы признателен за помощь, если это относительно легко для кого-то сделать.

ответ

1

Вы можете сделать это с помощью следующего регулярного выражения:

(?:1-?)?\(?\d{3}\)?[-.]?\s*\d{3}[-.]?\s*\d{4} 

Или с "границами":

(?<!\d)(?:1-?)?\(?\d{3}\)?[-.]?\s*\d{3}[-.]?\s*\d{4}(?!\d) 

См regex demo

регулярное выражение объяснение:

  • (?:1-?)? - необязательный (1 или ноль) последовательность 1 и дополнительный дефис
  • \(?\d{3}\)? - 3 последовательность цифр, необязательно прилагается (...)
  • [-.]? - дополнительный сепаратор (либо - или ., добавить больше, если это необходимо)
  • \s* - 0 или более пробельных символов (если необходимо исключить разрывы строк, используйте \p{Zs})
  • \d{3} - 3 последовательность цифр
  • [-.]? - 1 или 0 сепараторов
  • \s* - 0 или более пробелов
  • \d{4} - 4-значный порядок.

просмотровых обходные, (?<!\d) и (?!\d), позволяют только совпадение, если в целом картина не заключен с цифрами.

 Смежные вопросы

  • Нет связанных вопросов^_^