Просмотр регулярного выражения word привел к сбою (2025)

Аналогично этому

Шаги воспроизведения

  • включены регулярные выражения для отслеживаемых слов
  • действие тега для отслеживаемых слов
  • регулярное выражение *abc

Результат

Невозможно создать темы или сообщения

RegexpError (target of repeat operator is not specified: /(*abc)/i)
app/services/word_watcher.rb:239:in `initialize'
app/services/word_watcher.rb:239:in `new'
app/services/word_watcher.rb:239:in `word_matches?'
lib/topic_creator.rb:214:in `block in setup_tags'
lib/topic_creator.rb:213:in `each'
lib/topic_creator.rb:213:in `setup_tags'
lib/topic_creator.rb:48:in `create'
lib/post_creator.rb:493:in `create_topic'

Причина

  • * означает «повторить предыдущий токен ноль или более раз»
  • предыдущего токена нет
2 лайка

Так что регулярное выражение должно проверяться перед добавлением? И должна быть обработка ошибок, чтобы некорректное регулярное выражение не могло обрушить всю систему?

1 лайк

Очевидно, что здесь произошло следующее: слова для отслеживания были обычными словами для отслеживания, а * служил подстановочным знаком, после чего была включена опция «включить регулярные выражения для слов отслеживания».

Поэтому это

1 лайк

Ну, теперь это очевидно, когда ты так говоришь. :rofl:

Валидация регулярных выражений при сохранении кажется очень разумным решением.

Добавляю тег pr-welcome, но команда проведёт анализ и решит, имеет ли смысл реализовать это в ближайшие недели, чтобы сэкономить наше время на будущей поддержке.

1 лайк

Это не помешает пользователям вводить «обычные» выражения с подстановочными знаками, а затем включать опцию watched words regular expressions enabled, что и произошло в данном случае.

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

  def word_matches?(word, case_sensitive: false)
    options = case_sensitive ? nil : Regexp::IGNORECASE
    Regexp.new(WordWatcher.word_to_regexp(word), options).match?(@raw)
  end
2 лайка

Спасибо за отчет @RGJ, это будет исправлено в

3 лайка

Эта тема была автоматически закрыта через 10 часов. Новые ответы больше не принимаются.