Промпт: регулярное выражение по описанию
Regex с объяснением и тестовыми строками. Готовый промт на русском: скопируйте, подставьте свои данные и вставьте в GigaChat, YandexGPT, ChatGPT, Claude или Gemini.
Текст промпта
Что подставить в промт
| Поле | Пример |
|---|---|
| {flavor} | JavaScript |
| {task} | найти российские номера телефонов в тексте в форматах +7 912 345-67-89, 8(912)3456789, 89123456789 |
Ответы нейросетей на этот промпт
Регулярное выражение
/(\+?7|8)[\s\-\(\)]*([0-9]{3})[\s\-\(\)]*([0-9]{3})[\s\-]*([0-9]{2})[\s\-]*([0-9]{2})/
Разбор выражения по частям:
(\+?7|8)— либо начинается с символа+и цифры7, либо сразу с цифры8.+?означает, что знак плюс необязателен (+появляется максимум один раз).
[\s\-\(\)]*— любое количество пробелов, дефисов, скобок между частями номера телефона.
([0-9]{3})— три подряд идущие цифры (код оператора).
- Еще одно повторение группы символов разделителей
[\s\-\(\)]*
- Следующие две группы цифр (по три и два числа соответственно):
[0-9]{3}— три цифры,[0-9]{2}— две цифры.
- И еще одна группа разделителей перед последней парой чисел:
[\s\-]*
- Последняя пара цифр:
[0-9]{2}
Примеры совпадений:
Эти строки должны соответствовать выражению:
+7 912 345-67-898(912)3456789891234567898-912-345-67-89(8)912 345-67-89
Примеры НЕсовпадений:
Эти строки не должны соответствовать выражению (и объяснения почему):
+7 912 345-6789— последняя группа должна содержать ровно две цифры, здесь четыре.8(912)-345678— ошибка в количестве последних двух групп цифр.+7 91234567890— лишняя цифра в конце.8-912-345-678— неверная длина последней группы.8(912)(345)-(67-89)— дополнительные символы внутри номера недопустимы.
Пример использования регулярного выражения в JavaScript-коде:
const text = 'Мой номер телефона +7 912 345-67-89, а также есть другие телефоны: 8(912)3456789 и 89123456789.';
// Поиск всех номеров в тексте
const phoneNumbers = text.match(/(\+?7|8)[\s\-\(\)]*([0-9]{3})[\s\-\(\)]*([0-9]{3})[\s\-]*([0-9]{2})[\s\-]*([0-9]{2})/g);
console.log(phoneNumbers); // Вывод найденных номеров
Этот скрипт выведет массив телефонных номеров, найденных в тексте:
["+7 912 345-67-89", "8(912)3456789", "89123456789"]Регулярное выражение для JavaScript
/(?<!\d)(?:\+7|8)[\s-]?(?:\([3-9]\d{2}\)|[3-9]\d{2})[\s-]?\d{3}(?:[\s-]?\d{2}){2}(?!\d)/g
Оно находит российские номера, начинающиеся с +7 или 8, например:
+7 912 345-67-898(912)345678989123456789
Разбор по частям
(?<!\d)
Проверяет, что перед номером нет цифры.
Это нужно, чтобы не находить номер внутри более длинной последовательности цифр.
(?:\+7|8)
Начало российского номера:
+7- или
8
[\s-]?
Необязательный разделитель после кода страны/префикса:
- пробел
- табуляция
- перенос строки
- дефис
- или ничего
(?:\([3-9]\d{2}\)|[3-9]\d{2})
Код оператора или города из 3 цифр:
(912)- или
912
Первая цифра кода ограничена диапазоном [3-9], чтобы отсечь явно некорректные варианты вроде +7 012 ....
[\s-]?
Необязательный разделитель после кода.
\d{3}
Следующие 3 цифры номера.
(?:[\s-]?\d{2}){2}
Две группы по 2 цифры, каждая с необязательным разделителем перед ней.
Например:
67-89
6789
67 89
(?!\d)
Проверяет, что после номера нет цифры.
Это защищает от совпадения внутри более длинного числа.
g
Флаг g означает глобальный поиск — найти все совпадения в тексте.
Строки, которые должны совпасть
+7 912 345-67-89
Совпадает: классический формат с +7, пробелами и дефисами.
8(912)3456789
Совпадает: формат через 8, код в скобках, без разделителей.
89123456789
Совпадает: 11 цифр, начинается с 8.
+79123456789
Совпадает: международный формат без разделителей.
8 495 123 45 67
Совпадает: городской номер с пробелами.
Строки, которые не должны совпасть
+1 912 345-67-89
Не совпадает: номер начинается не с +7 и не с 8.
+7 012 345-67-89
Не совпадает: код начинается с 0, а выражение разрешает первую цифру кода только от 3 до 9.
79123456789
Не совпадает: нет +7, а просто 7 в начале не разрешена.
8912345678
Не совпадает: слишком короткий номер, только 10 цифр вместо 11.
891234567890
Не совпадает: слишком длинный номер, после номера есть лишняя цифра.
Пример использования в JavaScript
const text = `
Позвоните мне: +7 912 345-67-89.
Рабочий номер: 8(495)1234567.
Старый номер: 89123456789.
Некорректный: +1 912 345-67-89.
`;
const phoneRegex = /(?<!\d)(?:\+7|8)[\s-]?(?:\([3-9]\d{2}\)|[3-9]\d{2})[\s-]?\d{3}(?:[\s-]?\d{2}){2}(?!\d)/g;
const phones = text.match(phoneRegex);
console.log(phones);
Результат:
[
"+7 912 345-67-89",
"8(495)1234567",
"89123456789"
]Регулярное выражение
const phoneRegex = /(?:\+7|8)[\s\-]?\(?\d{3}\)?[\s\-]?\d{3}[\s\-]?\d{2}[\s\-]?\d{2}/g;
Разбор по частям
| Фрагмент | Значение | |
|---|---|---|
| `(?:\+7\ | 8)` | Код страны: либо +7, либо 8 (без захвата группы — ?:) |
[\s\-]? | Необязательный разделитель — пробел или дефис | |
\(?\d{3}\)? | Код оператора (3 цифры), может быть в скобках (912) или без них | |
[\s\-]? | Необязательный разделитель после кода оператора | |
\d{3} | Первые 3 цифры номера | |
[\s\-]? | Необязательный разделитель | |
\d{2} | Следующие 2 цифры | |
[\s\-]? | Необязательный разделитель | |
\d{2} | Последние 2 цифры |
Флаг g — ищет все совпадения в тексте, а не только первое.
✅ Строки, которые ДОЛЖНЫ совпасть
+7 912 345-67-89 — стандартный формат с пробелами и дефисами
8(912)3456789 — код в скобках, цифры без разделителей
89123456789 — вообще без разделителей
+79123456789 — код страны слитно с номером
8-912-345-67-89 — везде дефисы вместо пробелов
❌ Строки, которые НЕ ДОЛЖНЫ совпасть
+380671234567 — украинский код (+380), regex ждёт только +7 или 8
123-45-67 — нет кода страны, слишком короткий номер
+7.912.345.67.89 — разделители — точки, а не пробел/дефис (не входят в [\s\-])
89012345 — всего 8 цифр после "8" вместо 10, не хватает цифр
7 912 345 67 89 — нет "+" перед 7 и нет "8", не подходит под (?:\+7|8)
Пример использования в коде
const phoneRegex = /(?:\+7|8)[\s\-]?\(?\d{3}\)?[\s\-]?\d{3}[\s\-]?\d{2}[\s\-]?\d{2}/g;
const text = `
Звоните по номерам: +7 912 345-67-89, 8(912)3456789 или 89123456789.
Это не номер: 123-45-67, а это украинский: +380671234567.
`;
const matches = text.match(phoneRegex);
console.log(matches);
// ['+7 912 345-67-89', '8(912)3456789', '89123456789']
⚠️ Важное замечание
Регулярка не проверяет границы слов, поэтому если в тексте встретится длинная последовательность цифр (например, номер карты), она может случайно "выхватить" из неё 10 подходящих цифр. Для более строгой проверки в реальных проектах стоит:
- Добавить якоря
\bтам, где это уместно. - Предварительно очистить текст или использовать более специфичный паттерн с учётом контекста (например, требовать пробел/начало строки перед номером).
Пример более строгого варианта:
const strictPhoneRegex = /(?<!\d)(?:\+7|8)[\s\-]?\(?\d{3}\)?[\s\-]?\d{3}[\s\-]?\d{2}[\s\-]?\d{2}(?!\d)/g;
Здесь (?<!\d) и (?!\d) — негативные просмотры назад/вперёд, которые гарантируют, что перед и после номера нет других цифр.
Конечно, вот регулярное выражение для поиска российских номеров телефонов в JavaScript, с подробным разбором и примерами:
Регулярное выражение
/\+7(?:\s?\d{3}){2}(?:-?\d{2}){2}|\b8(?:\s?\(?\d{3}\)?\s?\d{3}(?:-?\d{2}){2}|\d{9})\b/g
Разбор по частям
Это регулярное выражение состоит из двух основных альтернатив, разделенных оператором |:
\+7(?:\s?\d{3}){2}(?:-?\d{2}){2}: Этот шаблон соответствует номерам, начинающимся с+7.\+7: Точное совпадение с+7. Обратный слеш\экранирует+, так как это специальный символ в регулярных выражениях.(?:...){2}: Это не-захватывающая группа, которая повторяется дважды.\s?: Необязательный пробел (0 или 1).\d{3}: Три цифры.(?:-?\d{2}){2}: Еще одна не-захватывающая группа, повторяющаяся дважды.-?: Необязательный дефис (0 или 1).\d{2}: Две цифры.- Примеры, которые будут найдены этой частью:
+7 912 345-67-89,+79123456789,+7 912 345 67 89
\b8(?:\s?\(?\d{3}\)?\s?\d{3}(?:-?\d{2}){2}|\d{9})\b: Этот шаблон соответствует номерам, начинающимся с8.\b: Граница слова. Это гарантирует, что8не является частью другого числа (например,12389123456789).8: Точное совпадение с8.(?:...|...): Это не-захватывающая группа, содержащая две альтернативы для формата после8.- Первая альтернатива (
\s?\(?\d{3}\)?\s?\d{3}(?:-?\d{2}){2}): Для форматов с скобками и/или пробелами. \s?: Необязательный пробел.\(?: Необязательная открывающая скобка. Обратный слеш\экранирует(, так как это специальный символ.\d{3}: Три цифры.\)?: Необязательная закрывающая скобка. Обратный слеш\экранирует).\s?: Необязательный пробел.\d{3}: Три цифры.(?:-?\d{2}){2}: Две группы по две цифры, каждая из которых может быть с необязательным дефисом.- Примеры, которые будут найдены этой частью:
8(912)3456789,8 912 345-67-89,8(912)345-67-89 - Вторая альтернатива (
\d{9}): Для формата без разделителей. \d{9}: Девять цифр (после8должно быть 9 цифр для полного 11-значного номера).- Примеры, которые будут найдены этой частью:
89123456789 \b: Граница слова. Это гарантирует, что номер не является частью другого числа.g: Флаг "глобальный поиск", который позволяет найти все совпадения в строке, а не только первое.
5 строк, которые должны совпасть
+7 912 345-67-898(912)345678989123456789Привет, мой номер: +79123456789, звони!Мой другой номер 8 912 345 67 89, а также 8(912)345-67-89.
5 строк, которые не должны совпасть (с пояснением)
+1 234 567-89-01- Начинается с+1, а не+7.8912345678- После8только 8 цифр, а не 9 (не 11-значный номер).891234567890- После810 цифр, а не 9 (слишком много цифр).Это просто текст без номера.- Нет чисел, соответствующих формату.+7 123 45- Недостаточно цифр после+7для полного номера.
Пример использования в коде
const text = `
Мои контакты: +7 912 345-67-89 (рабочий), 8(912)3456789 (личный).
Также есть старый номер 89123456789.
Неправильные номера: +1 234 567-89-01, 8912345678, 891234567890.
Еще один формат: +79123456789.
И такой: 8 912 345 67 89.
Или 8(912)345-67-89.
Просто текст.
`;
const russianPhoneNumberRegex = /\+7(?:\s?\d{3}){2}(?:-?\d{2}){2}|\b8(?:\s?\(?\d{3}\)?\s?\d{3}(?:-?\d{2}){2}|\d{9})\b/g;
const foundNumbers = text.match(russianPhoneNumberRegex);
if (foundNumbers) {
console.log("Найденные российские номера телефонов:");
foundNumbers.forEach(number => console.log(number));
} else {
console.log("Российские номера телефонов не найдены.");
}
// Вывод:
// Найденные российские номера телефонов:
// +7 912 345-67-89
// 8(912)3456789
// 89123456789
// +79123456789
// 8 912 345 67 89
// 8(912)345-67-89Советы
- Проверьте выражение на своих данных в regex101.com перед использованием.
- Скопируйте промпт кнопкой выше.
- Замените поля в фигурных скобках своими данными.
- Отправьте в нейросеть и сравните ответ с примером на этой странице.
Подробнее о структуре хорошего запроса: гид AI University.
Похожие промпты
Промпты работают лучше, когда понимаешь модель
56 официальных курсов Anthropic, OpenAI, Google и других на русском: первые уроки бесплатно, без VPN. Наборы промптов входят в полный доступ.