Как предотвратить наплыв спам-ботов на нашем форуме?

Я являюсь модератором форума среднего размера с более чем 10 000 пользователей. В прошлую ночь мы столкнулись с серьёзной спам-атакой: различные боты публиковали фейковые номера служб поддержки для разных авиакомпаний, туристических компаний и нескольких других организаций.

Все эти аккаунты публикуют номера телефонов разными способами (все номера из США, но вместо обычного дефиса для разделения цифр используются различные символы). Вчера я видел здесь пост, предлагающий фильтр для номеров телефонов, но проблема в том, что он будет ложно срабатывать на коды ошибок, которые появляются в нашем сервисе (что критически важно, поскольку наш форум предназначен для поддержки), а также будет помечать другие элементы, например, адреса в федериве.

Кроме того, такие решения, как Akismet, кажутся нам недоступными: форум управляется зарегистрированной в США компанией с ограниченной ответственностью (LLC), но на данный момент мы полностью финансируемся за счёт пожертвований, и оплата подобных услуг кажется нам нереалистичной.

У нас есть идея «ядерного варианта», но я сейчас решительно выступаю против неё, поскольку это исключит часть нашей аудитории, а также, на мой взгляд, ограничит доступ к поддержке.

Заранее благодарю!

Подобный спам в последнее время стал очень распространённым. У нас есть руководство по общей профилактике спама здесь:

В ответах был полезный пост о регулярном выражении, которое можно использовать для блокировки или пометки телефонных номеров и адресов электронной почты с помощью функции отслеживаемых слов.

Да, это был именно тот регулярный выражение, который я пробовал. К сожалению, он отфильтровал некоторые идентификаторы ActivityPub и коды ошибок, которые используются в нашем сервисе (они обычно отображаются в формате 123-4567).

Ах, я понял. Возможно, мы сможем придумать что-то более конкретное, чтобы избежать коротких кодов… Например:

\b\d{3}[-.\s]\d{3}[-.\s]\d{4}\b

Это сработает для форматов вроде 1-800-123-4567, 123 456 7890.

Если же формат больше похож на +1 123 456 7890, то лучше подойдёт следующий вариант, чтобы конкретно захватить +1:

\+1[-.\s]\d{3}[-.\s]\d{3}[-.\s]\d{4}

Ни один из этих вариантов не будет выдавать ложные срабатывания для коротких кодов вроде 123-4567.