поиск наличия email и телефона в тексте

R
На сайте с 03.07.2006
Offline
214
2670

Коллеги,

Нужно чтобы скрипт искал в тексте email по шаблону.

Сейчас это реализовано так:

    
$separate_text = explode(" ", $_POST[text]);
foreach ($separate_text as $text){
if (filter_var($text, FILTER_VALIDATE_EMAIL)){
$err[].="Обнаружены контакты в описании.";
break;
}
}

Но если email примыкает к русским символам, то он не определяется как валидный и пролазит в объявление.

Я подозреваю что есть более простой метод preg_match который обнаружит наличие email в тексте.

Также нужен аналогичный "определитель" телефонных номеров.

[umka]
На сайте с 25.05.2008
Offline
456
#1

Попробуйте сначала удалить из текста все лишние символы

[^a-z0-9@\.\-_]

---------- Добавлено 11.02.2012 в 21:06 ----------

Для поиска телефона вот такую регулярку придумал

/(\+?\d+\s*)?(\(\d+\)\s*)?\d+([\-\s]*\d+)+/

Не проверял в действии :)

Лог в помощь!
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#2

Просто ищите знак @ и всё. Не думаю, что кто-то будет его просто так использовать.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
palladin_jedi
На сайте с 13.07.2010
Offline
71
#3

Я обычно проверяю такой регуляркой:

[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}
Сайт о web-разработке и прочем (http://seazo.net)||Продвижение статьями под Google (http://short.seazo.net/ght4zf) Бесплатные консультации рефералам Sape (http://www.sape.ru/r.SWfwWOblBo.php) PHP и JS скрипты на заказ, создание сайтов с нуля и на CMS.
R
На сайте с 03.07.2006
Offline
214
#4
Попробуйте сначала удалить из текста все лишние символы
[^a-z0-9@\.\-_]

Что ж останется?

Для поиска телефона вот такую регулярку придумал
/(\+?\d+\s*)?(\(\d+\)\s*)?\d+([\-\s]*\d+)+/
Не проверял в действии

Нашёл такое

/(\+7|8|\+38|38)(\d+|-|\d{3}-)(\d{3})(-\d{3}|-\d{2}|\d+)(-\d{4}|-\d{2}-\d{2}|-\d{2}|\d{2}-\d{2}|\d{2,4})/

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

palladin_jedi:
Я обычно проверяю такой регуляркой:
[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}

не хватает чтобы работало не с отдельно взятым фрагментом текста, а со всем текстом.

R
На сайте с 03.07.2006
Offline
214
#5

Всем спасибо сделал вот так:


if (preg_match("/([a-z0-9_\-\.])+@([a-z0-9_\-\.])+\.([a-z\.]{2,6})/",$text)
or preg_match("/(\+7|8|\+38|38)(\d+|-|\d{3}-)(\d{3})(-\d{3}|-\d{2}|\d+)(-\d{4}|-\d{2}-\d{2}|-\d{2}|\d{2}-\d{2}|\d{2,4})/",$text)){
$err.="Контакты низя";
}
[umka]
На сайте с 25.05.2008
Offline
456
#6
rengen:

$err.="Контакты низя";

А если напишут, например, вот так +З8(ОI2)ЗЧ5678ɘ ?

Или словами?

palladin_jedi
На сайте с 13.07.2010
Offline
71
#7
[umka:
;10038847]А если напишут, например, вот так +З8(ОI2)ЗЧ5678ɘ ?
Или словами?

Я когда-то пытался на одном сайте запретить публикацию урлов и емейлов. Это бесполезное и неблагодарное занятие. Если спамер захочет проспамить - он сделает это.

Фильтрация на сервере может помочь только от школьников или от ботов, которыми пользуются школьники. :)

Для примера, строку

vasiliy собака pushkin точка ru

эта регулярка не отфильтрует.

Единственный, на мой взгляд, выход - оперативная модерация.

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#8

ТС, глупости делаете. Никогда такие запреты не спасали, поверьте мне как владельца чата, там столько фильтров, а толку никакого. Спамят просто прямым текстом.

Звонит на: один два три

т.п.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий