维基教科书:编辑过滤器/说明
外观
编辑过滤器管理 文档 · 讨论 · 如何创建过滤器 · 请求的编辑过滤器 · 报告误报 · 标签 |
编辑过滤器 非常强大 - 不要低估错误可能造成的损害。如果您不熟悉此操作,请确保从更了解编辑过滤器的编辑者那里获得适当的输入。 |
创建过滤器
本节解释如何创建过滤器并进行一些初步测试,这样您就不会淹没 历史页面。
- 阅读 mw:Extension:AbuseFilter/RulesFormat 的文档
- 在 调试工具 中测试一些表达式
- 例如,评估
'some string' rlike 'myregexp'
来测试您的正则表达式; - true 表达式评估为1,false 不显示任何内容
- 例如,评估
- 在 批量测试 页面手动测试您的代码
- 找到最近进行了您要针对的编辑的人,
- 将该用户名放在“用户更改”字段中,然后单击“测试”按钮;
- 如果您没有看到正向触发器
- 选中“显示与过滤器不匹配的更改”,然后再次单击“测试”
- 找到您要针对的编辑,然后单击“(详细信息)”
- 检查变量,然后可能返回到 调试工具
- 创建 空闲(仅记录)过滤器
- 在备注字段中添加类似“测试阶段,将添加警告”的内容
- 让空闲过滤器运行一段时间以测试误报和漏报
- 在 维基教科书讨论:编辑过滤器 上发布一条消息,以便其他管理员有机会修复您的代码或改进警告
- 最后,完全启用您的过滤器,例如添加警告、阻止、标记等
控制效率
因为这些过滤器在每次编辑时都会运行,所以措辞不当的过滤器极有可能严重降低编辑速度,甚至导致一些较大的页面超时。但是,对条件排序方式进行一些非常小的更改,可以大大减少过滤器的运行时间。以这种方式利用操作顺序,可以使过滤器变得良好,而不会因性能原因而必须禁用。
操作顺序
操作通常从左到右执行,但它们解析的顺序有所不同。一旦过滤器未能满足其中一个条件,它将停止检查其余条件(由于 短路评估)并继续执行下一个过滤器。评估顺序是
- 任何用括号括起来的内容 ((和)) 被评估为一个单元。
- 将变量/文字转换为它们各自的数据。(即,article_namespace到 0)
- 函数调用(norm, lcase等)
- 一元 + 和 - (即-1234, +1234)
- 关键字
- 布尔反转(!x)
- 指数运算(2**3 → 8)
- 乘法相关(乘法、除法、模数)
- 比较。(<, >, ==)
- 布尔运算。(&, |, ^, in)
使昂贵的操作更便宜
当使用关键字时,例如rlike, in,或contains,过滤器必须遍历整个字符串变量才能查找您要搜索的字符串。变量如old_wikitext往往非常大。有时,您可以使用更小的变量来近似这些变量,例如added_lines或removed_lines,过滤器可以更快地处理这些变量。此外,使用对old_size的检查也可以帮助确保您不会尝试检查一大块维基文本。
您应该始终对过滤器进行排序,以便会剔除最多编辑的条件排在最前面。通常,这是用户组或用户编辑次数检查;通常,最后一个条件应该是实际查找您要针对的破坏行为的正则表达式。