RGJ
(Richard - Communiteq)
1
与此问题类似
重现步骤
- 启用了监视词正则表达式
- 监视词标签操作
- 正则表达式
*abc
结果
无法创建主题或帖子
RegexpError (重复运算符的目标未指定:/(*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 个赞
pfaffman
(Jay Pfaffman)
2
所以正则表达式在被允许添加之前应该被验证?并且应该有一个救援,这样无效的正则表达式就不会导致整个世界崩溃?
1 个赞
RGJ
(Richard - Communiteq)
3
这里明显发生的情况是,监视的单词是常规的监视单词,而 * 是通配符,然后启用了“watched words regular expressions enabled”。
所以这个
1 个赞
sam
(Sam Saffron)
5
在保存时验证正则表达式似乎是一个非常明智的做法。
对此添加 pr-welcome 标签,但团队将进行分类并决定在未来几周内是否可以这样做,以节省我们未来的支持。
1 个赞
RGJ
(Richard - Communiteq)
6
这并不能阻止人们输入“普通”通配符表达式,然后启用 watched words regular expressions enabled,而这正是这里发生的情况。
我认为只需要在 regexp 调用 周围 添加一个异常处理程序
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 个赞