<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Оставить только цифры в строке: регулярки для JS и PHP с примерами]]></title><description><![CDATA[<p dir="auto">Часто в разработке приходится чистить строки от всего лишнего, оставляя только цифры. Это нужно для обработки номеров телефонов, цен или ID из пользовательского ввода. Регулярные выражения в <strong>JavaScript</strong> и <strong>PHP</strong> решают задачу одной строкой кода.</p>
<p dir="auto">Такие приёмы экономят время и упрощают валидацию данных. Мы разберём базовые шаблоны, примеры и нюансы для обеих платформ. В итоге вы сможете быстро применять их в проектах без лишних библиотек.</p>
<h2>Регулярка для JavaScript: простая очистка строки</h2>
<p dir="auto">В <strong>JavaScript</strong> метод <code>replace()</code> с регулярным выражением удаляет все символы кроме цифр. Основной шаблон — <code>/[^0-9]/g</code>, где <code>^</code> внутри скобок значит “не”, а <code>0-9</code> — диапазон цифр. Флаг <code>g</code> обеспечивает замену всех вхождений, без него сработает только первое.</p>
<p dir="auto">Возьмём номер телефона: <code>'+7 (910) 343-23-54'</code>. После <code>replace(/[^0-9]/g, '')</code> получится <code>'79103432354'</code>. Это удобно для форм, где пользователь вводит лишние символы. Такой подход работает везде — в браузере или Node.js, без дополнительных настроек.</p>
<ul>
<li><strong>Базовый шаблон</strong>: <code>/[^0-9]/g</code> — удаляет всё кроме цифр 0–9.</li>
<li><strong>С флагом i</strong>: <code>/[^0-9]/gi</code> — игнорирует регистр, но для цифр не актуально.</li>
<li><strong>Альтернатива с \d</strong>: <code>/[^\d]/g</code> — то же самое, \d значит цифру.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Исходная строка</th>
<th>Регулярка</th>
<th>Результат</th>
</tr>
</thead>
<tbody>
<tr>
<td>‘+7 (910) 343-23-54’</td>
<td><code>/[^0-9]/g</code></td>
<td>‘79103432354’</td>
</tr>
<tr>
<td>‘A1B2C3’</td>
<td><code>/[^\d]/g</code></td>
<td>‘123’</td>
</tr>
<tr>
<td>‘Цена: 1 234 руб.’</td>
<td><code>/[^0-9]/g</code></td>
<td>‘1234’</td>
</tr>
</tbody>
</table>
<p dir="auto"><em>Нюанс</em>: Если нужны только русские цифры или Unicode, используйте <code>/[^\p{N}]/gu</code> в современных движках.</p>
<h2>Регулярка для PHP: preg_replace в действии</h2>
<p dir="auto">В <strong>PHP</strong> функция <code>preg_replace()</code> аналогично чистит строки. Шаблон <code>/[^0-9]/</code> без флага <code>g</code>, так как функция по умолчанию заменяет все вхождения. Разделители — слеши <code>/</code>, внутри <code>[^0-9]</code> — всё кроме цифр, заменяем на пустую строку <code>''</code>.</p>
<p dir="auto">Пример: <code>$str = "A()bs23 + 456 Проверка"; echo preg_replace('/[^0-9]/', '', $str);</code> выдаст <code>23456</code>. Это идеально для парсинга пользовательских данных или баз. Функция работает с PCRE, поддерживает Unicode с модификатором <code>u</code>.</p>
<ul>
<li><strong>Стандартный вызов</strong>: <code>preg_replace('/[^0-9]/', '', $str)</code> — базовая очистка.</li>
<li><strong>С диапазоном</strong>: <code>preg_replace('/[^0-7]/', '', $str)</code> — оставит только 0–7.</li>
<li><strong>Проверка на наличие</strong>: <code>preg_match('/\d/', $str)</code> — есть ли хоть одна цифра.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Пример кода</th>
<th>Вход</th>
<th>Выход</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>preg_replace('/[^0-9]/', '', $str)</code></td>
<td>‘от 1200 руб.’</td>
<td>‘1200’</td>
</tr>
<tr>
<td><code>preg_replace('/[^\d]/', '', $str1)</code></td>
<td>‘1 200 р + торг’</td>
<td>‘1200’</td>
</tr>
<tr>
<td><code>preg_replace('/[^0-9]/u', '', $str)</code></td>
<td>‘Цена １２３４’</td>
<td>‘1234’ (с u для Unicode)</td>
</tr>
</tbody>
</table>
<p dir="auto"><em>Важно</em>: Всегда экранируйте слеши, если они в строке, и проверяйте результат на пустоту.</p>
<h2>Сравнение подходов JS и PHP</h2>
<p dir="auto">Оба языка используют похожий синтаксис PCRE, но с разными функциями. В <strong>JS</strong> — это <code>string.replace(regexp, '')</code>, глобальный поиск через <code>g</code>. В <strong>PHP</strong> — <code>preg_replace(pattern, '', $str)</code>, глобальность по умолчанию. Выбор зависит от контекста: фронтенд или бэкенд.</p>
<p dir="auto">Для униформности можно вынести шаблон в константу. В JS флаги ставятся в конце (<code>/pattern/g</code>), в PHP — после разделителя (<code>/pattern/g</code>). Оба поддерживают <code>\d</code> как shorthand для цифр, что короче <code>[0-9]</code>.</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Аспект</th>
<th>JavaScript</th>
<th>PHP</th>
</tr>
</thead>
<tbody>
<tr>
<td>Функция</td>
<td><code>str.replace(/[^0-9]/g, '')</code></td>
<td><code>preg_replace('/[^0-9]/', '', $str)</code></td>
</tr>
<tr>
<td>Глобальность</td>
<td>Флаг <code>g</code> обязателен</td>
<td>По умолчанию</td>
</tr>
<tr>
<td>Unicode</td>
<td><code>/[^\p{N}]/gu</code></td>
<td><code>/[^0-9]/u</code></td>
</tr>
<tr>
<td>Проверка</td>
<td><code>str.match(/\d/)</code></td>
<td><code>preg_match('/\d/', $str)</code></td>
</tr>
</tbody>
</table>
<ul>
<li><strong>Когда JS</strong>: Маски ввода, валидация форм на клиенте.</li>
<li><strong>Когда PHP</strong>: Обработка POST-данных, парсинг логов.</li>
<li><strong>Кросс-платформа</strong>: Шаблон <code>/[^0-9]/g</code> работает идентично.</li>
</ul>
<p dir="auto"><strong>Производительность</strong>: Для длинных строк JS быстрее, PHP — с кэшированием шаблона через <code>preg_replace_callback</code>.</p>
<h2>Вариации и продвинутые шаблоны</h2>
<p dir="auto">Иногда нужны не все цифры, а только в диапазоне или с точками. Для версии вроде ‘1.2.3’ используйте <code>/[^0-9\.]/g</code>. Это оставит цифры и точки. Ещё вариант — <code>/\d+/g</code> для извлечения групп цифр в массив.</p>
<p dir="auto">В реальных задачах встречаются пробелы или дефисы в номерах: ‘1 234-56’. Шаблон <code>/[^0-9\s-]/g</code> уберёт остальное. Для телефонов популярно нормализовать до E.164 формата. Тестируйте на edge-кейсах вроде пустой строки или только букв.</p>
<ul>
<li><code>/[^0-9\.]/g</code> — цифры + точки для версий.</li>
<li><code>/\d{3}/g</code> — группы по 3 цифры.</li>
<li><code>/\d+/g.match(str)</code> — массив всех чисел.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Сценарий</th>
<th>Шаблон JS</th>
<th>Шаблон PHP</th>
</tr>
</thead>
<tbody>
<tr>
<td>Только цифры</td>
<td><code>/[^0-9]/g</code></td>
<td><code>/[^0-9]/</code></td>
</tr>
<tr>
<td>Цифры + точки</td>
<td><code>/[^0-9\.]/g</code></td>
<td><code>/[^0-9\.]/</code></td>
</tr>
<tr>
<td>Только 0-5</td>
<td><code>/[^0-5]/g</code></td>
<td><code>/[^0-5]/</code></td>
</tr>
</tbody>
</table>
<p dir="auto"><em>Совет</em>: Для сложных случаев комбинируйте с <code>split()</code> или <code>filter()</code>.</p>
<h2>Шаблоны для мобильной валидации и API</h2>
<p dir="auto">В мобильных apps или API часто чистят JSON-ответы. В <strong>React Native</strong> или <strong>Flutter</strong> (с JS-bridging) те же регулярки. Для API — валидация на сервере PHP перед сохранением. Это предотвращает инъекции и ошибки БД.</p>
<p dir="auto">Представьте ввод: ‘8909-123-45-67’. После очистки — чистый номер для базы. Тестируйте на кириллице: ‘восемь９１０’ с <code>/[^0-9]/u</code>. Оба языка справляются с многобайтовыми строками при правильных флагах.</p>
<h2>Тонкости с отрицанием и границами</h2>
<p dir="auto">Ключ — отрицание <code>[^...]</code>, оно исключает символы из класса. Добавьте <code>^</code> и <code>$</code> для полной строки: <code>/^[0-9]+$/</code> — проверка, что строка состоит только из цифр. Без них — просто очистка.</p>
<p dir="auto">Это полезно для валидации: <code>if (str.match(/^[0-9]+$/)) { ... }</code>. В PHP аналогично <code>preg_match('/^[0-9]+$/', $str)</code>. Разница в экранировании: JS не требует для слешей в строке.</p>
<h2>Практика на грани: числа с разделителями</h2>
<p dir="auto">Когда цифры с пробелами или запятыми, как ‘1,234.56’. Шаблон <code>/[^0-9,\.]/g</code> оставит их. Потом парсите <code>parseFloat(result.replace(',', ''))</code>. Для валют — комбинируйте регулярки с <code>number_format()</code> в PHP.</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Вход</th>
<th>Шаблон</th>
<th>Результат</th>
</tr>
</thead>
<tbody>
<tr>
<td>‘1,234 руб.’</td>
<td><code>/[^0-9]/g</code></td>
<td>‘1234’</td>
</tr>
<tr>
<td>‘1.234,56 €’</td>
<td><code>/[^0-9\.]/g</code></td>
<td>‘1.23456’</td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>Вывод</strong>: Экспериментируйте с <code>RegExp.test()</code> для быстрой проверки.</p>
<h2>Масштабирование: от простого к сложному</h2>
<p dir="auto">Начните с базовой <code>/[^0-9]/</code>, добавляйте символы в класс. Для телефонов — <code>/[^0-9+]/g</code>. Тестируйте в консоли браузера или php онлайн. Это база, на которой строится сложный парсинг.</p>
<p dir="auto">Ограничения: регулярки не для вложенных структур, там лучше парсеры. Но для строк — идеал скорости и простоты. Подумать стоит над обработкой очень длинных строк или интеграцией в фреймворки вроде Laravel/Vue.</p>
]]></description><link>https://forum.exlends.ru/topic/734/ostavit-tolko-cifry-v-stroke-regulyarki-dlya-js-i-php-s-primerami</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 03:52:27 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/734.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 Feb 2026 14:38:37 GMT</pubDate><ttl>60</ttl></channel></rss>