Регулярное выражение для номера телефона россия

I would also suggest looking at the «libphonenumber» Google Library. I know it is not regex but it does exactly what you want.

For example, it will recognize that:

15555555555

is a possible number but not a valid number. It also supports countries outside the US.

Highlights of functionality:

  • Parsing/formatting/validating phone numbers for all countries/regions of the world.
  • getNumberType — gets the type of the number based on the number itself; able to distinguish Fixed-line, Mobile, Toll-free, Premium Rate, Shared Cost, VoIP and Personal Numbers (whenever feasible).
  • isNumberMatch — gets a confidence level on whether two numbers could be the same.
  • getExampleNumber/getExampleNumberByType — provides valid example numbers for all countries/regions, with the option of specifying which type of example phone number is needed.
  • isPossibleNumber — quickly guessing whether a number is a possible phonenumber by using only the length information, much faster than a full validation.
  • isValidNumber — full validation of a phone number for a region using length and prefix information.
  • AsYouTypeFormatter — formats phone numbers on-the-fly when users enter each digit.
  • findNumbers — finds numbers in text input.
  • PhoneNumberOfflineGeocoder — provides geographical information related to a phone number.

Examples

The biggest problem with phone number validation is it is very culturally dependant.

  • America
    • (408) 974–2042 is a valid US number
    • (999) 974–2042 is not a valid US number
  • Australia
    • 0404 999 999 is a valid Australian number
    • (02) 9999 9999 is also a valid Australian number
    • (09) 9999 9999 is not a valid Australian number

A regular expression is fine for checking the format of a phone number, but it’s not really going to be able to check the validity of a phone number.

I would suggest skipping a simple regular expression to test your phone number against, and using a library such as Google’s libphonenumber (link to GitHub project).

Introducing libphonenumber!

Using one of your more complex examples, 1-234-567-8901 x1234, you get the following data out of libphonenumber (link to online demo):

Validation Results

Result from isPossibleNumber()  true
Result from isValidNumber()     true

Formatting Results:

E164 format                    +12345678901
Original format                (234) 567-8901 ext. 123
National format                (234) 567-8901 ext. 123
International format           +1 234-567-8901 ext. 123
Out-of-country format from US  1 (234) 567-8901 ext. 123
Out-of-country format from CH  00 1 234-567-8901 ext. 123

So not only do you learn if the phone number is valid (which it is), but you also get consistent phone number formatting in your locale.

As a bonus, libphonenumber has a number of datasets to check the validity of phone numbers, as well, so checking a number such as +61299999999 (the international version of (02) 9999 9999) returns as a valid number with formatting:

Validation Results

Result from isPossibleNumber()  true
Result from isValidNumber()     true

Formatting Results

E164 format                    +61299999999
Original format                61 2 9999 9999
National format                (02) 9999 9999
International format           +61 2 9999 9999
Out-of-country format from US  011 61 2 9999 9999
Out-of-country format from CH  00 61 2 9999 9999

libphonenumber also gives you many additional benefits, such as grabbing the location that the phone number is detected as being, and also getting the time zone information from the phone number:

PhoneNumberOfflineGeocoder Results
Location        Australia

PhoneNumberToTimeZonesMapper Results
Time zone(s)    [Australia/Sydney]

But the invalid Australian phone number ((09) 9999 9999) returns that it is not a valid phone number.

Validation Results

Result from isPossibleNumber()  true
Result from isValidNumber()     false

Google’s version has code for Java and Javascript, but people have also implemented libraries for other languages that use the Google i18n phone number dataset:

  • PHP: https://github.com/giggsey/libphonenumber-for-php
  • Python: https://github.com/daviddrysdale/python-phonenumbers
  • Ruby: https://github.com/sstephenson/global_phone
  • C#: https://github.com/twcclegg/libphonenumber-csharp
  • Objective-C: https://github.com/iziz/libPhoneNumber-iOS
  • JavaScript: https://github.com/ruimarinho/google-libphonenumber
  • Elixir: https://github.com/socialpaymentsbv/ex_phone_number

Unless you are certain that you are always going to be accepting numbers from one locale, and they are always going to be in one format, I would heavily suggest not writing your own code for this, and using libphonenumber for validating and displaying phone numbers.

33 самые полезные регулярки с примерами использования для быстрого решения наиболее распространенных задач веб-разработки.

33 самые полезные регулярки для веб-разработчика

Пользовательские данные

1. Юзернейм

Стандартный формат юзернейма – цифры, строчные буквы, символы - и _. Разумная длина – от 3 до 16 знаков. В зависимости от ваших конкретных потребностей вы можете изменять набор символов (например, разрешить символ *) и длину строки.

/^[a-z0-9_-]{3,16}$/

JS:

re.test('normal_login-123'); // true
re.test('IncorrectLogin'); // false
re.test('inc*rrect_l*gin'); // false

Что используем:
Символы ^ и $ указывают на начало и конец строки, так что введенный юзернейм будет проверен на совпадение полностью от первого до последнего символа.

2. Валидация email

Проверка адреса электронной почты на корректность – одна из самых частых задач веб-разработчика. Без этого не обходятся ни разнообразные формы подписки, ни авторизация.

Для валидации email существует множество различных регулярок. Вот одна из них – не самая большая и не самая сложная, но достаточно точная для быстрой проверки адреса:

/^[A-Z0-9._%+-]+@[A-Z0-9-]+.+.[A-Z]{2,4}$/i

JS:

re.test('correct-email@mail.com'); // true
re.test('CORRECT.email@mail123.com'); //true
re.test('incorrect-email@mail'); //false

Что используем:
Флаг i в регулярных выражений обеспечивает регистронезависимость сравнения.

3. Номер телефона

Проверяя номер телефона, обязательно учитывайте общепринятые форматы, так как в разных странах их принято записывать по-разному. Например, для американского стиля подойдет вот такая регулярка:

/^+?(d{1,3})?[- .]?(?(?:d{2,3}))?[- .]?ddd[- .]?dddd$/

JS:

re.test('(212) 348-2626'); // true
re.test('+1 832-393-1000'); // true
re.test('+1 202-456-11-11'); // false

Что используем:
Квантификатор ? соответствует одному предыдущему символу или его отсутствию.

4. Надёжность пароля

Часто встречаете на различных сервисах требование придумать сложный пароль? Кто и как определяет требуемую степень сложности? На самом деле, для этого есть некоторые стандарты: минимальная длина, разный регистр символов, наличие букв, цифр и специальных знаков.

Чтобы обеспечить ваших пользователей надежными паролями, можете воспользоваться вот таким выражением (или составить собственные регулярки со специфическими требованиями):

/^(?=.*[A-Z].*[A-Z])(?=.*[!@#$&*])(?=.*[0-9].*[0-9])(?=.*[a-z].*[a-z].*[a-z]).{8,}$/

JS:

re.test('qwerty'); // false
re.test('qwertyuiop'); // false
re.test('abcABC123$'); // true

Что используем:
Оператор ?= внутри скобочной группы позволяет искать совпадения «просматривая вперед» переданную строку и не включать найденный фрагмент в результирующий массив.

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

5. Почтовый индекс (zip-code)

Формат почтового индекса, как и телефона, зависит от конкретного государства.

В России все просто: шесть цифр подряд без разделителей.

/^d{6}$/

Американский zip-code может состоять из 5 символов или в расширенном формате ZIP+4 – из 9.

/^d{5}(?:[-s]d{4})?$/

JS:

re.test('75457'); // true
re.test('98765-4321'); // true

Что используем:
Последовательность ?: внутри скобочной группы исключает ее из запоминания.

6. Номер кредитной карты

Разумеется, при проверке номера платежной карты не стоит полагаться на регулярные выражения. Однако с их помощью вы можете сразу же отсеять очевидно неподходящие последовательности и не нагружать сервер лишним запросом.

С помощью вот такой длинной регулярки вы можете поддерживать сразу несколько платежных систем:

/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35d{3})d{11})$/

Подробнее разобраться, откуда что взялось, вы можете здесь.

Что используем:
Вертикальная черта | в регулярных выражениях обозначает альтернацию, то есть выбор одного варианта из нескольких.

Распространенные форматы

7. Начальные и конечные пробелы

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

/^[ s]+|[ s]+$/g

JS:

let str = " hello ";
console.log(str.length); // 7
str = str.replace(re, '');
console.log(str.length); // 5

Что используем:
Квантификатор + соответствует инструкции {1,} – один и более символов.

8. Дата

С датами приходится работать очень часто, а форматов записи у них великое множество. Прежде чем начинать обработку, имеет смысл проверить, соответствует ли вид переданной строки требуемому.

Вот такое регулярное выражение поддерживает несколько форматов дат – с полными и краткими числами (5-1-91 и 05-01-1991) и разными разделителями (точка, прямой или обратный слеш).

/^(?:(?:31(/|-|.)(?:0?[13578]|1[02]))1|(?:(?:29|30)(/|-|.)(?:0?[1,3-9]|1[0-2])2))(?:(?:1[6-9]|[2-9]d)?d{2})$|^(?:29(/|-|.)0?23(?:(?:(?:1[6-9]|[2-9]d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1d|2[0-8])(/|-|.)(?:(?:0?[1-9])|(?:1[0-2]))4(?:(?:1[6-9]|[2-9]d)?d{2})$/

Здесь учитываются даже високосные годы!

JS:

re.test('29-02-2000'); // true
re.test('29-02-2001'); // false

Что используем:
Последовательности вида 1, 2 и так далее – это обратные ссылки на скобочные группы, определяющие вид разделителя. Благодаря им можно отсеять даты с разными разделителями:

re.test('10-10/2010'); // false

9. IPv4

Адрес IP используется для идентификации конкретного компьютера в интернете Он состоит из четырех групп цифр (байтов), разделенных точками (192.0.2.235).

/b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)b/

Что используем:
Класс b означает «границу слова» и имеет нулевую ширину (то есть это не отдельный символ).

10. IPv6

IPv6 – это новый, более сложный синтаксис IP-протокола. Выражение для проверки на этот формат выглядит куда страшнее, хотя на самом деле разница заключается только в поддержке шестнадцатеричных чисел:

(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))

11. Base64

Base64 – достаточно распространенный формат кодирования бинарных данных, который часто используется, например, в email-рассылках.

Для валидации строки в этом формате можно использовать следующее регулярное выражение:

^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$

12. ISBN

ISBN – международная номенклатура для печатных книг. Номер может состоять из 10 (ISBN-10) или 13 цифр (ISBN-13). На самих книгах ISBN обычно разделен дефисами на несколько групп (код страны, издательства и самой книги), но для проверки и использования их следует удалять.

Это регулярное выражение позволяет проверить оба формата сразу:

/b(?:ISBN(?:: ?| ))?((?:97[89])?d{9}[dx])b/i

JS:

re.test('ISBN 9781106998966'); // true
re.test('1106998966'); // true
re.test('110699896x'); // true

Числа

13. Проверка на число

Очень простая проверка строки на число с помощью регулярок:

/^d{1,}$/

JS:

re.test('13'); // true
re.test('23yy'); // false

14. Разделитель разрядов

Задача разбить большое число на разряды по три цифры встречается в разработке довольно часто. Оказывается это очень легко сделать с помощью регулярок.

/d{1,3}(?=(d{3})+(?!d))/g

JS:

'1234567890'.replace(re, '$&,'); // 1,234,567,890

Что используем:
Комбинация $& в строке замены позволяет подставить найденную комбинацию.

15. Цена

Цены могут быть представлены во множестве различных форматов. Универсального регулярного выражения для них, скорее всего, не существует, но цену в долларах из строки извлечь очень просто.

Эта регулярка предполагает, что для разделения разрядов числа используются запятые, а дробная часть отделена точкой:

/($[0-9,]+(.[0-9]{2})?)/

JS:

let price = 'price $5,555.55'.match(re)[0]; '$5,555.55

Что используем:
Комбинация {2} означает, что символ из диапазона [0-9] должен быть повторен ровно 2 раза (дробная часть цены).

Файлы и URL

16. Сопоставить строку URL

Если вам необходимо проверить, является ли полученная строка URL-адресом, вы можете воспользоваться вот такой регуляркой:

/[-a-zA-Z0-9@:%_+.~#?&/=]{2,256}.[a-z]{2,4}b(/[-a-zA-Z0-9@:%_+.~#?&/=]*)?/gi

Она подойдет для адресов с различными протоколами (HTTP, HTTPS, FTP) и даже без протокола.

JS:

re.test('https://yandex.ru'); // true
re.test('yandex.ru'); // true
re.test('hello world'); // false

17. Извлечение домена

В URL-адресе много частей: протокол, домен, поддомены, путь к странице и строка запроса. С помощью регулярок можно отбросить все лишнее и получить только домен:

/https?://(?:[-w]+.)?([-w]+).w+(?:.w+)?/?.*/i

JS:

let domain = 'https://proglib.io'.match(re);
console.log(domain[1]); // proglib

Что используем:
Метод match возвращает объект с данными совпадения. Под индексом 1 в нем хранится совпадение, соответствующее первой скобочной группе.

18. Расширения

Одна строчка регулярного выражения позволяет быстро и просто получить расширение файла, с которым вам предстоит работать:

/^(?:.*.(?=(htm|html|class|js)$))?[^.]*$/i

JS:

let file1 = 'script.js'.match(re)[1]; // js
let file2 = 'hello'.match(re) [1]; // undefined

Разумеется, при необходимости сюда можно добавлять другие расширения.

19. Протокол

Иногда требуется извлечь протокол полученной ссылки. Регулярные выражения и тут облегчают жизнь:

/^([a-zA-Z]+):///

JS:

let protocol = 'https://proglib.io/'.match(re)[0]; // https

Социальные сети

20. Twitter

Имя пользователя Twitter:

/@([A-Za-z0-9_]{1,15})/

21. Facebook

URL аккаунта на Facebook:

/(?:http://)?(?:www.)?facebook.com/(?:(?:w)*#!/)?(?:pages/)?(?:[w-]*/)*([w-]*)/

22. YouTube

Получение ID видео на YouTube:

/https://(?:youtu.be/|(?:[a-z]{2,3}.)?youtube.com/watch(?:?|#!)v=)([w-]{11}).*/gi

JS:

re.exec('https://www.youtube.com/watch?v=JbgvaQ_rM4I')[1]; // JbgvaQ_rM4I

Что используем:
Метод exec объекта регулярного выражения работает почти так же, как метод match строки.

HTML и CSS

23. HEX-цвета

Веб-разработчику часто приходится иметь дело с цветами, заданными в шестнадцатеричном формате. Регулярки позволяют легко извлекать такие цвета из строки:

/#([a-fA-F]|[0-9]){3, 6}/

Крутой рецепт, правда? :)

24. Адрес изображения

Для получения адреса изображения обычно используется DOM-метод img.getAttribute('src'). Регулярки для этого применяются редко, но полезно все же знать их возможности:

/< *[img][^>]*[src] *= *["']{0,1}([^"' >]*)/

JS:

re.exec('<img src="image.png" alt="image1">')[1]; // image.png

25. CSS-свойства

Еще одна нетривиальная ситуация – получение свойств CSS с помощью регулярных выражений:

/s*[a-zA-Z-]+s*[:]{1}s[a-zA-Z0-9s.#]+[;]{1}/gm

JS:

let css = ` .element {
color: white;
background: black;
font-size: 16px;
}`
css.match(re);

Что используем:
Флаг m в регулярных выражениях включает многострочный режим.

26. HTML комментарии

А это очень полезная регулярка для удаления комментариев из HTML-кода:

/<!--(.*?)-->/

Что используем?
Символ ?, стоящий в регулярном выражении после другого квантификатора, переводит его в ленивый режим.

27. Title

Получить заголовок веб-страницы можно с помощью такого регулярного выражения:

/<title>([^<>]*?)</title>/

28. rel=«nofollow»

Важная SEO-задача, которую очень не хочется делать вручную, – добавление внешним ссылкам атрибута rel="nofollow". Обратимся к регулярным выражениям:

PHP:

$html = '<a href="https://site.com">site.com</a>,
      <a href="my-site.com">my-site.com</a>,
      <a href="https://site.com" rel="nofollow">site.com</a>';
$re = '/(<as*(?![^>]*brel=)([^>]*bhref="https?://[^"]+"))/';
$result = preg_replace($re, '$1 rel="nofollow"', $html);

Эта регулярка выбирает в тексте все ссылки с протоколом http/https без атрибута rel и добавляет его.

29. Медиа запросы

Если требуется проанализировать медиа-запросы CSS, воспользуйтесь этой регуляркой:

/@media([^{]+){([sS]+?})s*}/g

Что используем:
Класс s обозначает пробельный символ (а также таб и перевод строки), а класс S – наоборот, любой символ кроме пробельного.

30. Подсветка слов

Полезное выражение для поиска и выделения слов в тексте:

/b(ipsum)b/ig

JS:

let text = 'Lorem ipsum dolor, lorem ipsum dolor.';
text.replace(re, '<span style="background: yellow">$&</span>')

PHP:

$re = '/b(ipsum)b/i';
$text = 'Lorem ipsum dolor, lorem ipsum dolor.';
preg_replace($re, '<span style="background:#5fc9f6">1</span>', $text);

Разумеется, слово ipsum можно заменить на любое другое слово или словосочетание

Другие задачи веб-разработчика

31. Проверка версии Internet Explorer

К счастью, старый добрый IE постепенно уходит в прошлое, но он все же еще играет некоторую роль в современном вебе. Этот фрагмент кода позволяет определить версию всеми любимого браузера:

/^.*MSIE [5-8](?:.[0-9]+)?(?!.*Trident/[5-9].0).*$/

32. Удалить повторы

Регулярки дают возможность автоматически удалить случайные повторы слов без проглядывания всего текста:

/(w+)s+1/gi

JS:

"hello world world hello".replace(re, "$1") // hello world hello

33. Количество слов

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

^[^s]*$ &nbsp; // ровно одно слово
^[^s]*s[^s]*$ // ровно два слова
^[^s]*s[^s]* // два слова и больше
^([^s]*s){2}[^s]*$ // ровно три слова
^([^s]*s){4, }[^s]*$ // пять слов и больше
Свои любимые регулярки пишите в комментариях :)

Полезные статьи по регулярным выражениям

  • 5 практических примеров использования регулярных выражений на JavaScript
  • Практическое введение в регулярные выражения для новичков
  • 11 материалов по регулярным выражениям
  • Регулярные выражения: 5 сервисов для тестирования и отладки

Регулярные выражения или, как его обычно называют, RegEx — это любая последовательность символов, которая может использоваться в качестве шаблона для поиска символов или строк.

Например, чтобы определить, содержит ли строка или фраза слово «яблоко», мы можем использовать регулярное выражение /яблоко для поиска в строке. В качестве другого примера мы можем использовать /[0-9], чтобы проверить, содержит ли данная строка число от 0 до 9.

Регулярные выражения и их использование

Регулярные выражения широко используются для различных целей в современных веб-операциях. Проверка веб-форм, поисковые системы, лексические анализаторы в IDE, текстовые редакторы и редакторы документов — вот лишь несколько примеров, в которых часто используются регулярные выражения.

Мы все использовали CTRL + F много раз для поиска в документе или фрагменте кода, чтобы найти определенное слово, фразу или выражение. Эту операцию можно назвать очень распространенным примером использования регулярных выражений.

Прежде чем продолжить, давайте взглянем на очень часто используемое регулярное выражение.

Можете ли вы догадаться приведенный ниже RegEX, для чего он используется?

^([a-zA-Z0-9_-.]+)@([a-zA-Z0-9_-.]+).([a-zA-Z]{2,5})$

Не волнуйтесь, если не можете угадать. Я уверен, что вы сможете догадаться к концу этой статьи.

Токены

Для начала давайте посмотрим на различные символы в показанном выше регулярном выражении

^([a-zA-Z0-9_-.]+)@([a-zA-Z0-9_-.]+).([a-zA-Z]{2,5})$

Если мы посмотрим на приведенное выше регулярное выражение, мы увидим, что оно состоит из множества символов или токенов. Давайте узнаем, что они означают:

Токен Значение
^ Этот токен обозначает начало строки.
(…) Обозначает группу, в которой фиксируется все, что дано в (…).
[…] [] Включает символы, любой из которых может быть сопоставлен. Например — [abc] будет соответствовать либо a, либо b, либо c.
a-z Набор букв от a до z. Мы должны помнить, что Regex чувствителен к регистру.
A-Z Набор заглавных букв от A до Z.
0-9 Цифры от 0 до 9.
_ Это будет соответствовать символу _.
Экранирование символов.
. Соответствует символу «.» (точка). Его используется потому, что символ «.» в регулярном выражении — это сам по себе токен, который соответствует любому символу
+ Количественный показатель, соответствует одному или нескольким символам, с которыми он используется. Например, «a+» означает одно или несколько вхождений символа «а» .
- Будет соответствовать символу «-».
@ Будет соответствовать символу «@».
{} Это еще один количественный показатель. Он используется для обозначения количества вхождений символа. Например, a{3} означает ровно три «a».
$ Означает конец строки.

Разбивка данного шаблона регулярных выражений

Теперь, вооружившись этой таблицей, давайте попробуем декодировать указанное выше регулярное выражение:

^([a-zA-Z0-9_-.]+) означает, что мы ищем строку, которая начинается как минимум с одного или нескольких буквенно-цифровых символов верхнего или нижнего регистра, знаков подчеркивания, дефисов или точек. Например, все, что похоже на user_name.01, будет соответствовать шаблону. Мы должны помнить, что здесь нет необходимости включать все символы, достаточно одного символа [a-zA-Z0-9_-.].

Символ @ соответствует единственному вхождению @. Добавляя к предыдущему примеру, подойдет что-то вроде user_name.01@.

([a-zA-Z0-9_-.]+) аналогичен первому пункту. Это также означает, что мы ищем строку, содержащую хотя бы один или несколько буквенно-цифровых символов, подчеркиваний, дефисов или точек. Например: user_name.01@gmail

Как вы уже догадались, мы намекаем на шаблон электронной почты. Двигаясь дальше, . соответствует символу точки «.». Если мы продолжим текущий пример, получится что-то вроде user_name.01@gmail.

([a-zA-Z]{2,5})$ означает, что строка должна заканчиваться от 2 до 5 букв алфавита в верхнем или нижнем регистре. Если мы добавим .com к предыдущему примеру, мы можем получить user_name.01@gmail.com, что является общим шаблоном строки электронной почты.

Объединив все вышеперечисленное, мы видим, что ищем строку идентификатора электронной почты. Теперь мы можем использовать это выражение для проверки любого идентификатора электронной почты.

PS. — Это шаблон для наиболее распространенных идентификаторов электронной почты в Интернете.

Типы токенов

Многие токены могут использоваться в различных комбинациях в регулярном выражении для описания широкого спектра выражений. Ниже мы рассмотрим различные типы токенов, которые используются в регулярных выражениях. Кроме того, мы также рассмотрим наиболее часто используемые токены в каждой категории.

Базовые токены

Начнем с основных токенов. Эти токены используются почти во всех регулярных выражениях. Следовательно, мы должны сначала узнать о них.

Токен Значение
r Соответствует символу возврата каретки (перевода строки).
Соответствует нулевому символу.
n Ищет новую строку.
t Соответствует табуляции (Tab).

Классы символов

Двигаясь дальше, давайте посмотрим на токены символов. Они используются для сопоставления алфавитов, чисел и других специальных символов.

Токен Значение
a Буквально соответствует символу a. Точно так же все буквы и числа, когда используются отдельно, ищет конкретный символ.
abc Соответствует строке abc.
[abc] Это ищет один символ среди a, b или c.
[^abc] Соответствует любому символу, кроме a, b или c.
[a-z] Строчный символ в диапазоне от a до z
[^a-z] Любой символ не в диапазоне от a до z. Сюда также входят символы верхнего регистра.
[A-Z] Символ верхнего регистра между A и Z.
[^A-Z] Любой символ не в диапазоне от A до Z.
[0-9] Любое число от 0 до 9
[^0-9] Символ вне диапазона от 0 до 9
[a-zA-Z0-9] Соответствует символу, который может быть символом нижнего регистра от a до z или любым символом от A до Z или любым числом от 0 до 9.
[^a-zA-Z0-9] Любой символ, не попадающий в предыдущую категорию.
. Любой одиночный символ.
s Используется для поиска пробельных символов.
S Используется для поиска не пробельных символов.
d Соответствует любой цифре
D Не соответствует цифре
w Буквенный или цифровой символ или знак подчёркивания
W Любой символ, кроме буквенного или цифрового символа или знака подчёркивания
$ Означает конец строки
b Соответствует границе слова
B Используется для сопоставления границы, отличной от слова

Квантификаторы

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

Давайте посмотрим на несколько распространенных кванторов.

Токен Значение
a? Соответствует нулю или одному вхождению.
a* Соответствует нулю или более вхождений (подряд) a.
a+ Для одного или нескольких последовательных вхождений a.
a{5} Ищет ровно пять последовательных вхождений буквы a.
a{5, } Как минимум для пяти или более последовательных вхождений a.
a{5, 7} Ищет любое количество последовательных a от 5 до 7.

Группы

Эти токены, как следует из названия, будут совпадать в группах.

Токен Значение
(…) Захватывает все, что заключено в круглые скобки.
(a|b) Соответствует либо a, либо b.
(?:…) Соответствует всему, что заключено в квадратные скобки
(?(1)yes|no) Соответствует условному выражению.

Флаги

Это специальные инструкции, которые даются механизму сопоставления шаблонов при поиске совпадения.

Токен Значение
g Глобальный поиск. Будет искать до тех пор, пока не найдет больше совпадений, то есть до конца данной строки или группы строк.
m Многострочное соответствие, т. Е. Строка за строкой.
x Указывает движку игнорировать пробелы при сопоставлении.
X Используется для расширенного сопоставления.
s Соответствует одной строке.
i Используется для сопоставления без учета регистра.
u Для символов Юникода.

Якоря

Дополнительные инструкции для движка.

Токен Значение
^ Обозначает начало строки
A Тоже означает начало строки
Z Маркер конца строки.
z Токен для абсолютного конца строки.
G Начало поиска.

Часто используемые регулярные выражения

Регулярные выражения широко используются в Интернете. Регулярные выражения практически неотделимы от современных вычислительных приложений, от проверки форм до поиска данных, содержащих определенное ключевое слово или ключевые слова.

Давайте посмотрим на несколько знакомых примеров использования регулярных выражений.

Соответствие номера телефона

Давайте посмотрим, каков образец телефонного номера, используемого например в Индии. Код страны идет первым. Обычно он содержит символ «+», за которым следует число 91, которое является кодом страны для Индии. Кроме того, номера телефонов в Индии обычно начинаются с 6, 7, 8 или 9. За ними следуют еще 9 цифр.

Таким образом, действительное регулярное выражение для индийского номера мобильного телефона будет таким:

^(+91[-s]?)?[0]?(91)?[6-9]d{9}$

Проверка надежности паролей

Большинство веб-сайтов рекомендуют нам предоставить надежный пароль, который содержит комбинацию цифр, прописных и строчных букв и символов. Также должно быть минимальное количество символов — 6 или 8. Это сделано для того, чтобы пароль было очень сложно взломать.

Любой пароль, соответствующий этому правилу, может быть сгенерирован или подтвержден на надежность пароля с помощью регулярного выражения.

^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})

Соответствие URL

URL-адреса — это наиболее распространенный способ использования Интернета и быстрого перехода на нужную веб-страницу. Почти у каждого веб-сайта есть URL-адрес. Следовательно, каждый URL-адрес стандартизирован и следует определенному шаблону. Каждый URL следует либо по протоколу HTTP, либо по протоколу HTTP, за которым часто следует « : // » и « www ». Затем название веб-сайта, за которым следует .com, .ru, .net, .org и т. д.

Чтобы проверить правильность URL-адреса, мы можем использовать регулярное выражение, подобное приведенному ниже.

https?://(www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}b([-a-zA-Z0-9()@:%_+.~#?&//=]*)

Форматы даты и времени

Форматы даты и времени также очень часто используются в Интернете. Есть много форматов дат, используемых в различных приложениях, программном обеспечении или системах. Даты всегда следует использовать в формате, позволяющем использовать их для пользователя или приложения, которое пытается их прочитать.

Дата в формате дд-ММ-гггг может быть проверена с помощью регулярного выражения, которое может быть таким, как указано ниже.

^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$

Также рекомендуем прочитать:

  1. Самые полезные расширения VS Code для повышения производительности
  2. Как добавить темную тему на свой сайт с помощью CSS и JavaScript
  3. 10 лучших шрифтов для программирования, которые нужны разработчикам
  4. 8 шагов, как получить 100 звезд и больше на GitHub

Сборник основных шаблонов регулярных выражений на PHP для проверки данных.

Проверка набора из латинских букв и цифр

Регулярное выражение для проверки набора только из латинских букв и цифр:

$pattern = '/^[a-z0-9]+$/i';
$var = 'String123';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Если необходимо добавить в набор некоторые символы:

// использовать тире
$pattern = '/^[a-z0-9-]+$/i';
$var = 'String-123';

// использовать знак подчёркивания
$pattern = '/^[a-z0-9-_]+$/i';
$var = 'String-1_23';

// использовать точку
$pattern = '/^[a-z0-9-_.]+$/i';
$var = 'String-1_23.end';

// использовать пробел
$pattern = '/^[a-z0-9-_. ]+$/i';
$var = 'String-1_23.end ps...';

Проверка на кириллицу и цифры

Регулярное выражение для проверки набора только из букв кириллицы и цифр:

$pattern = '/^[а-яё0-9]+$/iu';
$var = 'Строка123';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Проверка на число

Регулярное выражение для проверки данных на целое число:

$pattern = '/^d+$/';
// Исключаем 0
$pattern = '/^[1-9]+$/';
// Не больше 1-й цифры
$pattern = '/^[1-9]{1}+$/';
// Максимум 4 цифры
$pattern = '/^[1-9]{1,4}+$/';

$var = 123;
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Регулярное выражение для проверки данных на тип Float (числа с плавающей точкой):

$pattern = '/^[0-9]*[.,][0-9]+$/';
$var = 123.45;
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

// Если нужно, чтобы пропускал и целые числа
$pattern = '/^[0-9]*[.,]?[0-9]+$/';

Проверка логина

Регулярное выражение для проверки логина. Разрешено использовать только латинские буквы, цифры, тире и знак подчёркивания. Длина логина от 2 до 20 символов (включительно):

$text = 'Login_123-45';
if (preg_match("/^[a-z0-9-_]{2,20}$/i", $text)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Проверка Email

Регулярное выражение для проверки Email:

$pattern = '/^([a-z0-9_-]+.)*[a-z0-9_-]+@[a-z0-9_-]+(.[a-z0-9_-]+)*.[a-z]{2,6}$/';
$var = 'admin@site.com';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Более современный и правильный способ:

$var = 'admin@___site.com';
$email = filter_var($var, FILTER_SANITIZE_EMAIL);
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
  throw new InvalidArgumentException('Invalid Email');
return $email;

Проверка номера телефона

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

$pattern = '/^((8|+7)[- ]?)?((?d{3})?[- ]?)?[d- ]{7,10}$/';
$var = '+7(982)000-00-00';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Проверка даты по формату

Формат DD.MM.YYYY:

$pattern = '/^(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](19|20)dd$/';
$var = '10.12.2019';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Формат MySQL YYYY-MM-DD:

$pattern = '/^[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01])$/';
$var = '2019-12-10';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Проверка md5-хэша

Регулярное выражение для проверки на корректность md5-хэша:

$pattern = '/^[a-f0-9]{32}$/';
$var = '341be97d9aff90c9978347f66f945e77';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Проверка IP адресов

Регулярное выражение для проверки IPv4 адреса:

$pattern = '/^((25[0-5]|2[0-4]d|[01]?dd?).){3}(25[0-5]|2[0-4]d|[01]?dd?)$/';
$var = '192.168.0.1';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Проверка IPv6 адреса:

$pattern = '/((^|:)([0-9a-fA-F]{0,4})){1,8}$/i';
$var = '2001:DB8:3C4D:7777:260:3EFF:FE15:9501';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Проверка доменного имени

Регулярное выражение для проверки на корректность доменного имени сайта:

$pattern = '/^(https?://)?([da-z.-]+).([a-z.]{2,6})([/w .-]*)*/?$/';
$var = 'https://prowebmastering.ru';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Понравилась статья? Поделить с друзьями:
  • Регистратура шенкурская црб номер телефона
  • Регулярное выражение для номера телефона python
  • Регистратура црб муром номер телефона регистратуры
  • Регистратура упорово больница номер телефона
  • Регистратура шемышейка больница номер телефона