Регулярное выражение проверки номера телефона python

Регулярные выражения в Python

В Python для работы с регулярными выражениями есть модуль re . Для использования его нужно импортировать. Рассмотрим простой пример поиска номера телефона:

>>> import re >>> match = re.search('\d-\d-\d', 'Мой номер 495-456-9102') >>> print('Найденный телефонный номер: ' + match.group()) Найденный телефонный номер: 495-456-9102

Если найдены совпадения, метод re.search() возвращает объект Match . Если совпадений нет — None .

Методы, которые предоставляет библиотека re :

  • re.match(pattern, string, [flags=0])
  • re.search(pattern, string, [flags=0])
  • re.findall(pattern, string, [flags=0])
  • re.split(pattern, string, [maxsplit=0], [flags=0])
  • re.sub(pattern, replace, string, [count=0], [flags=0])
  • re.compile(pattern, [flags=0])

Список метасимволов, которые поддерживает модуль re :

  • . — Один любой символ, кроме новой строки \n
  • ? — 0 или 1 вхождение шаблона слева
  • + — 1 и более вхождений шаблона слева
  • * — 0 и более вхождений шаблона слева
  • \w — Любая цифра или буква ( \W — все, кроме буквы или цифры)
  • \d — Любая цифра от 0 до 9 ( \D — все, кроме цифры)
  • \s — Любой пробельный символ ( \S — любой непробельнй символ)
  • \b — Граница слова
  • […] — Один из символов в скобках ( [^…] — любой символ, кроме тех, что в скобках)
  • \ — Экранирование специальных символов ( \. означает точку или \+ — знак «плюс»)
  • ^ и $ — Начало и конец строки соответственно
  • — От n до m вхождений ( — n и больше)
  • a|b — Соответствует a или b
  • (…) — Группирует выражение и возвращает найденный текст
  • \t,\n — Символ табуляции и новой строки соответственно
Читайте также:  Javascript add attribute to elements

Создание групп с помощью круглых скобок:

>>> match = re.search('(\d)-(\d-\d)', 'Мой номер 495-456-9102') >>> match.group() '495-456-9102' >>> match.group(0) '495-456-9102' >>> print('Код города: ' + match.group(1)) Код города: 495 >>> print('Номер телефона: ' + match.group(2)) Номер телефона: 456-9102

Если нужно извлечь сразу все группы:

>>> match = re.search('(\d)-(\d-\d)', 'Мой номер 495-456-9102') >>> match.groups() ('495', '456-9102') >>> code, number = match.groups() >>> code '495' >>> number '456-9102'

Метод re.search() находит только первое вхождение шаблона. Если нужно найти все вхождения, используйте метод re.findall() :

>>> matches = re.findall('\d-\d-\d', 'Домашний 495-456-9102 или мобильный 926-123-4567') >>> matches ['495-456-9102', '926-123-4567']

Поиск всех групп для всех совпадений шаблона:

>>> matches = re.findall('(\d)-(\d-\d)', 'Домашний 495-456-9102 или мобильный 926-123-4567') >>> matches [('495', '456-9102'), ('926', '123-4567')] >>> matches[0][0] '495' >>> matches[1][1] '123-4567'

Метод re.split() разделяет строку по заданному шаблону:

>>> re.split('\n', 'First line.\nSecond line.\nThird line.') ['First line.', 'Second line.', 'Third line.']

Метод re.sub() ищет шаблон в строке и заменяет его на указанную подстроку. Если шаблон не найден, строка остается неизменной.

>>> re.sub('RoboCop', 'Робот-полицейский', 'RoboCop is part man, part machine, all cop.') 'Робот-полицейский is part man, part machine, all cop.'

В строке замены можно использовать обратные ссылки \1 , \2 , \3 и т.д.

>>> re.sub('(\d)-(\d-\d)', 'код города \\1, номер телефона \\2', 'Мой номер: 495-456-9102') 'Мой номер: код города 495, номер телефона 456-9102'
>>> None == re.match('\d-\d-\d', '495-456-9102 Мой номер') False >>> None == re.match('\d-\d-\d', 'Мой номер 495-456-9102') True

Метод re.compite() позволяет собрать регулярное выражение в отдельный объект, который может быть использован для поиска. Это также избавляет от переписывания одного и того же выражения.

regexp = re.compile('\d-\d-\d') match = regexp.search('Мой номер 495-456-9102') print('Найденный телефонный номер: ' + match.group())
Найденный телефонный номер: 495-456-9102

Флаги компиляции регулярных выражений

  • re.A или re.ASCII
  • re.DEBUG
  • re.I или re.IGNORECASE
  • re.L или re.LOCALE
  • re.M или re.MULTILINE
  • re.S или re.DOTALL
  • re.X или re.VERBOSE

Игнорирование регистра при поиске соответствий

>>> re.search('robocop', 'RoboCop is part man, part machine, all cop.', re.IGNORECASE).group() 'RoboCop'

Комбинации .* соответствует все, за исключением символа новой строки. С помощью re.DOTALL можно установить режим, при котором точке соответствует также символ новой строки.

>>> re.search('.*', 'First line.\nSecond line.\nThird line.').group() 'First line.' >>> re.search('.*', 'First line.\nSecond line.\nThird line.', re.DOTALL).group() 'First line.\nSecond line.\nThird line.'

Если нужно использовать несколько флагов компиляции:

>>> regexp = re.compile('foo', re.DOTALL | re.IGNORECASE)

Флаг компиляции re.VERBOSE включает многословный режим, при котором пробелы и комментарии игнорируются.

# регулярное выражение для номера телефона phoneRegex = re.compile(''' (?:\(?(\d)\)?)? # код города (?:\s|-)? # разделитель (\d) # первые три цифры (?:\s|-)? # разделитель (\d) # еще две цифры (?:\s|-)? # разделитель (\d) # еще две цифры (?:\s*доб[.а-я]*\s*(\d))? # добавочный ''', re.VERBOSE) # регулярное выражение для адреса эл.почты emailRegex = re.compile(''' [a-z0-9._-]+ # имя пользователя @ # @ [a-z0-9.-]+ # первая часть домена \.[a-z] # вторая часть домена ''', re.VERBOSE | re.IGNORECASE)

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

  • 1С:Предприятие (31)
  • API (29)
  • Bash (43)
  • CLI (99)
  • CMS (139)
  • CSS (50)
  • Frontend (75)
  • HTML (66)
  • JavaScript (150)
  • Laravel (72)
  • Linux (146)
  • MySQL (76)
  • PHP (125)
  • React.js (66)
  • SSH (27)
  • Ubuntu (68)
  • Web-разработка (509)
  • WordPress (73)
  • Yii2 (69)
  • БазаДанных (95)
  • Битрикс (66)
  • Блог (29)
  • Верстка (43)
  • ИнтернетМагаз… (84)
  • КаталогТоваров (87)
  • Класс (30)
  • Клиент (27)
  • Ключ (28)
  • Команда (68)
  • Компонент (60)
  • Конфигурация (62)
  • Корзина (32)
  • ЛокальнаяСеть (28)
  • Модуль (34)
  • Навигация (31)
  • Настройка (140)
  • ПанельУправле… (29)
  • Плагин (33)
  • Пользователь (26)
  • Практика (99)
  • Сервер (74)
  • Событие (27)
  • Теория (105)
  • Установка (66)
  • Файл (47)
  • Форма (58)
  • Фреймворк (192)
  • Функция (36)
  • ШаблонСайта (68)

Источник

Regex for Phone Number Find and Validation in Python

In this tutorial, it’s shown how to find and validate phone numbers in Python using simple examples. We will review different phone number formats which are the most popular.

The best option for search and validation of data like phones numbers, zip codes, identifiers is Regular expression or Regex.

Next, we’ll see the examples to find, extract or validate phone numbers from a given text or string. The article starts with easy examples and finishes with advanced ones.

Step 1: Find Simple Phone Number

Let’s suppose that we need to validate simple phone number formats which don’t change. For example:

The goal is to find all matches for the pattern.
The mentioned solution is very basic and it’s not working for numbers like:

In order to deal with those cases the Regex should be improved.

Step 2: Regex for Phone Numbers with a Plus

Often phones numbers are displayed with plus sign like:

This format is matched by next regular expression:

Note that this will catch:

5000-000-0004 will be extracted as 000-000-000. In the next step we will solve this problem.

Step 3: Validate Phone Numbers for Exact Match

If the the format is important and only exact matches are needed like:
000-000-000 , +000-000-000 but not — 5000-000-0004 , +000-000-0004 then we need to add word boundaries to our Regex by adding at the start and the end \b :

Next let’s see a more generic example which covers international and country phone numbers.

Step 4: Validate International Phone Number

It’s difficult to find and test international numbers with 100% accuracy. Analysis of the data might be needed in order to check what formats are present in the text.

One possible solution for validation of international numbers is:

Another regular expression is:

Step 4: Validate US, UK, French phone numbers

For example let’s start with US phone numbers:

can be done with next Regex:

UK or GB numbers like:

can be searched and validated by:

The next simple Regex will work for French numbers:

Step 5: Find phone numbers in different formats

If you like to build a Regex which find various formats you can try with the next one:

The one above will cover most phone numbers but will not work for all.

If the validation is important or additional features are needed like:

  • updates for new formats/countries/regions
  • geographical information related to a phone number
  • timezone information

then we will recommend mature libraries to be used. Good example in this case is the Google’s Java and JavaScript library for parsing, formatting, and validating international phone numbers.

Conclusion

Have in mind that Regex are powerful but you may face performance issues for the complex ones. Try to use simple and understandable Regex. Sometimes you may need to play with flags in order to make it work properly:

Another important note is about using:

We covered most cases of phone validation by using python and Regex.

By using SoftHints — Python, Linux, Pandas , you agree to our Cookie Policy.

Источник

Оцените статью