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

vdddslep

Новичок
помогите с регулярным выложением

не могу разобраться с регуляркой надо в тексте банить все телефоны ,но только телефоны
т.е. пример :
tv 33 привет мне 23 года позвони мне 8918 70 16 33 4 MMC
должно получится
tv 33 привет мне 23 года позвони мне **** ММС

вариантов написания телефонов много например :8918-70-16-15-8 или 8918 ** 70 ** 16 ** 15 ** 5


я написал следующее :

$str="tv 33 привет мне 23 года позвони мне 8918 70 16 33 4 MMC";
$str=preg_replace("/([0-9]([\s\!@#\$%\^&*+-\|\/]{2,3})){0,7}/","**",$str);

и у меня ВСЕ числа заменились ***
 

Dovg

Продвинутый новичок
1. твоя регулярка меняет не только числа на звезды
2. vdddslep 8918 привет 70 позвони 16 мне 33 пожалуйста 4
сможешь обычным русским языком объяснить как найти такую запись, не порезав лишнего?

-~{}~ 28.03.07 15:54:

я бы находил что-нить похожее на код (наверное можно все сотовые перечислить), и резал бы его и еще 7 цифр после

-~{}~ 28.03.07 15:56:

пс. на твоем примере этот метод работает :)
 

vdddslep

Новичок
мда все сотовые перечислить не вариант точно так как их число очень верно растет
а алгоритм следующий я делал :
(если встретили цифру а за ней либо цифра либо повторяющийся разделител до 6 раз) и если эта последовательность повторяется хотябы ч раза то меняем на ****
/([0-9]([\0-9s\!@#\$%\^&*+-\|\/]{0,6})){0,4}/
 

vdddslep

Новичок
они и без кодов телефоны пишут просто пишут что МТС и 4----5-6-7-3---2--4****3
а надо чтоб искали первую цифру т.е 4 далее после неё стоит разделители (----) далее последовательность эта повторяется более 4 раз т.е.
1)4----
2)5-
3)6-
4)7-
5)3---
6)2--
7)4****
8)3(пробел)
т.е последовательность повторяется аж 8 раз что более чем 4 тогда меняем на ****
 

vdddslep

Новичок
блин точно вот в чем ошибка большое спасибо я даже не заметил
вот окончательный результат : /([0-9]([0-9\s\!@#\$%\^&*+-\|\/]{0,3})){4,}/
 
Сверху