Alex_Wells
@Alex_Wells
PHP/Kotlin

Как отфильтровать все слова из списка, при этом что-бы оно не равнялось другому?

Здравствуйте. Задача стоит в фильтровании нежелательных ссылок на сайте. Все бы ничего, но при этом нужно пропусть из фильтра конкретную ссылку/ссылки. К примеру строка выглядит так: "some words link.com mysite.ru somelink.net"
При этом link.com и somelink.net нужно заменить на что-то, а mysite.ru оставить. Пока что я выколупал такой RegExp:
/(http(s)?:\/\/)?(www\.)?(те|самые|нежелательные|слова|которые|находятся|в|домене)[\w\d-.а-аЏаА-б]{0,15}(\.com|\.ru|\.net|\.gl|.бб|\.pro|\.tv)(\/)?/i


По-идее если эти слова находятся в ссылке - RegExp проходит. Но нужно учесть, что если весь "обьект" который сканирует php равняется "mysite.ru" - он не срабатывает. Надеюсь суть понятна, заранее спасибо за ответы!
  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
27cm
@27cm
TODO: Написать статус
<?php

$input = 'some words link.com mysite.ru somelink.net';
$forbidden = ['link.com', 'somelink.net'];

// Экранируем все спецсимволы в списке запрещённых сайтов
$regexp = implode(array_map('preg_quote', $forbidden), '|');
$output = preg_replace('/(https?:\/\/)?(www\.)?(' . $regexp . ')/i', '***', $input);

https://ideone.com/FMyBPF

Можно и попроще:
<?php

$input = 'some words link.com mysite.ru somelink.net';
$output = preg_replace('/(https?:\/\/)?(www\.)?(link\.com|somelink\.net)/i', '***', $input);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы