powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Модифицировать регулярку для поиска цифр
7 сообщений из 7, страница 1 из 1
Модифицировать регулярку для поиска цифр
    #39882003
morgot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть регулярка, для поиска номеров телефонов в тексте (не верификация поля ввода, а именно в тексте, т.е. нельзя ограничивать символами начала и конца строки).

Код: php
1.
$p ="/((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,12}/";



Проблема в том, что под эту регулярку попадают вот такие строки
Код: html
1.
date=1572019480]



Как можно модифицировать регулярку, чтобы если перед номером есть '=' или после символ ']' - то отклонять? Т.е. после (или до) цифр может идти что угодно, кроме вот этих двух символов.
...
Рейтинг: 0 / 0
Модифицировать регулярку для поиска цифр
    #39882004
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите страницу https://www.php.net/manual/ru/regexp.reference.assertions.php

Фрагменты оттуда:
авторА foo(?!bar) соответствует любому появлению "foo", после которого не идёт "bar". авторНапример, (?<!foo)bar найдёт вхождения "bar", которым не предшествует "foo".
...
Рейтинг: 0 / 0
Модифицировать регулярку для поиска цифр
    #39882034
morgot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему-то не работает. Пробовал и так
Код: html
1.
((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,12}(?!\])


и так
Код: html
1.
(?!=)((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,12}


все равно находит
...
Рейтинг: 0 / 0
Модифицировать регулярку для поиска цифр
    #39882499
TolikD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Советую поменять тактику
Код: php
1.
2.
3.
$p = '/[^\=\d]{2}(((8|\+7)[- ]?)?'
	.'(\(\d{3}\)|\d{3}[- ]?)?'
	.'([\d- ]{7,12}))[^\d\]]{2}/';
...
Рейтинг: 0 / 0
Модифицировать регулярку для поиска цифр
    #39882501
TolikD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя посмотрел, в принципе то же самое, что и у вас
Код: php
1.
$p ="/[^\d=]{2}((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,12}[^\d\]]{2}/";


Весь секрет в выражениях [^\d=]{2} и [^\d\]]{2}. Можно подумать, как ограничиться одним символом [^=] [^\]], но я считаю, что этого будет достаточно для большинства случаев.
...
Рейтинг: 0 / 0
Модифицировать регулярку для поиска цифр
    #39882514
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думается, вряд ли получится одним простым выражением отловить точно все варианты. Переменное количество символов в необязательных фрагментах "((8|\+7)[\- ]?)?" и "(\(?\d{3}\)?[\- ]?)?", да и вариантов в "[\d\- ]{7,12}" думается, слишком велико. В данном случае из "=1572019480]" легко берется фрагмент по условию "от 7 до 12", так, что рядом оказываются вполне приемлемые цифры, а не нежелательные символы.
Можно попробовать сделать несколько регекспов с более жесткими правилами. Вряд ли это будет самым хорошим способом. Впрочем, других мыслей собрать искомое за один проход пока нет. За два или за три, нормализуя данные, можно, конечно. Оно и проще, скорее всего.
...
Рейтинг: 0 / 0
Модифицировать регулярку для поиска цифр
    #39882531
morgot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TolikD , спасибо, все работает. Строка с date пропала, а это главное, т.к. эта строка была в каждом втором посте.

vkle , да там много мусора попадает,вида id=1318533. Но я сделал еще чуть иначе, добавил

Код: php
1.
2.
3.
$res = filter_var($mm[0],FILTER_SANITIZE_NUMBER_INT);	
		if (strlen($res) < 10)
			continue;



правда, и после такой валидации остаются строки вида -------------- , но это уже приемлемо плюс-минус.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Модифицировать регулярку для поиска цифр
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]