2023年政策修订增补工作正在进行中,欢迎参与!
  • Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

說明:濫用過濾器使用指導/規則格式

萌娘百科,萬物皆可萌的百科全書!轉載請標註來源頁面的網頁連結,並聲明引自萌娘百科。內容不可商用。
跳至導覽 跳至搜尋
Commons-emblem-notice.svg
這個頁面「Help:濫用過濾器使用指導/規則格式」是萌娘百科的幫助文檔
  • 本文用於介紹萌娘百科中一些特定功能的操作方法;
  • 本文僅是一篇論述,不屬於方針或指引。如果本指南與相關方針或指引發生衝突或存在不一致的情況,請以方針或指引的條文為準。

過濾器規則格式類似 C/Java/Perl 的語言的條件語句。

字面量

閣下可以將內容放置於單引號或者雙引號(用於字符串)來指定一個字面量,或者直接按其原樣輸入(對於數字,整數和浮點數皆可)。閣下可以用 \n 來表示換行,\t 來表示制表符,在引號字符前加反斜槓來轉義引號字符。

例子

注釋

閣下可以用下列語法輸入注釋:

/* 這是一條注釋 */

變量

濫用過濾器按名字將不同變量傳入解析器。這些變量可以通過在字面量可用的地方輸入它們的名字來訪問。閣下也可以在濫用日誌里查看與每請求關聯的變量定義。

閣下可以在理解了在一行(以;結尾算一行)里關聯操作符號:=並帶上一個條件的情況下定義更多的變量。例子(來自 enwp:Special:AbuseFilter/79

列表:

全部變量

所有情況下可用的變量
描述 名稱 數據類型 可能的值
動作 action string edit, move, createaccount, autocreateaccount, delete, upload[1], stashupload[2]
用戶的編輯次數 user_editcount string 對未註冊用戶來說是空值。
用戶名 user_name string
用戶電子郵件地址的確認時間 user_emailconfirm string YYYYMMDDHHMMSS
用戶帳號年齡 user_age 按秒計算。 IP 用戶為 0。
用戶是否被封禁 user_blocked boolean 被封禁用戶的值是 1。
用戶當前是否使用移動版界面編輯 user_mobile boolean 移動版編輯的值是 1。
用戶組別 user_groups
用戶所擁有的權限 user_rights
頁面ID (可從 HTML 原始碼找到 - 搜索 wgArticleId) article_articleid integer 理論上新頁面的值應該是 0,但是這個判斷不可靠。應當使用 "old_size==0" 來判斷是否為新頁面創建。
文章命名空間 article_namespace integer 請參考 命名空間索引
不包含命名空間的頁面標題 article_text string
完整頁面標題 article_prefixedtext string
頁面編輯保護級別 article_restrictions_edit
頁面移動保護級別 article_restrictions_move
頁面上傳保護級別 article_restrictions_upload
頁面創建保護級別 article_restrictions_create
最後十個該頁面的貢獻者 article_recent_contributors 如果用戶為唯一貢獻者,則為空值。只檢查最近 100 個歷史版本。
頁面的第一個貢獻者 article_first_contributor
對於某些操作可用的變量
描述 名稱 數據類型 可能的值
編輯摘要 summary string
編輯是否被標記為小編輯 minor_edit string
編輯前舊頁面原始碼 old_wikitext
編輯後新頁面原始碼 new_wikitext
因編輯造成的統一差異對比 edit_diff
因編輯造成的統一差異對比(保存前預處理後的版本) edit_diff_pst
新頁面大小 new_size integer
新頁面大小 old_size integer
頁面大小差值 edit_delta
保存前預處理後的增加行數 added_lines_pst
增加行數 added_lines
減少行數 removed_lines
新文字裡的所有外部連結 all_links
編輯前頁面連結數量 old_links
編輯後增加的外部連結數量 added_links
編輯後減少的外部連結數量 removed_links
保存前預處理後的維基文本 new_pst
新版本解析後的HTML文本 new_html
去除了標籤的新頁面文字 new_text
已禁用 old_html
已禁用 old_text
編輯是否從 Tor 網絡出口發送 tor_exit_node boolean 0, 1 (僅在 TorBlock 安裝後可用)
編輯的 UNIX 時間戳 timestamp string int(timestamp) 將會給閣下呈現可用於年月日計算的數字。
文件內容的 SHA1 哈希值 file_sha1 [1]
文件大小 file_size integer 文件大小,按字節算[1]
移動目的地頁面的頁面ID moved_to_articleid
移動目的地頁面的完整標題 moved_to_prefixedtext
移動目的地頁面的命名空間 moved_to_namespace
移動原始頁面的命名空間 moved_from_namespace
移動原始頁面的完整標題 moved_from_prefixedtext
移動原始頁面的頁面ID moved_from_articleid
帳號名(帳號創建時) accountname
舊版本的內容模型 old_content_model string 關於內容模型變更的更多信息,詳見 Help:ChangeContentModel
新版本的內容模型 new_content_model string 關於內容模型變更的更多信息,詳見 Help:ChangeContentModel

CentralAuth 也提供一個類似 user_groups 的 global_user_groups 變量。

備註

action='move' 時,只有變量 summary, action, timestampuser_* 可用。變量 article_* 也可用,但是前綴被分別代表原始頁面名和目標頁面名的 moved_from_ and moved_to_ 所替換。舉個例子,article_text 被替換成了 moved_from_textmoved_to_text

從 MediaWiki 1.28 開始(gerrit:295254),action='upload' 只在發布上傳,而不是存放上傳時使用。一個新 action='stashupload' 被引入,用於所有上傳(包括存放上傳)。它和過去的 action='upload' 行為類似,且只提供關於文件元數據的變量(file_*)。有關頁面編輯的變量,包括 summary, new_wikitext 等等,現在對 action='upload' 可用。對於每一個文件上傳操作,過濾器可能會以 action='stashupload' 被調用(對於上傳到存放處),且過濾器一定會以 action='upload' 被調用。它們不再以 action='edit' 被調用。

過濾器作者應該在他(她)們的過濾器代碼中使用 action='stashupload' | action='upload' 來檢查文件內容,比如拒絕低解析度文件;在需要檢查文件上傳的維基文本部分時只使用 action='upload',比如拒絕沒有描述文本的文件。這將允許將上傳文件和發布文件分開的工具(比如 UploadWizarddialog)在用戶花時間填寫上傳內容具體信息時通知用戶上傳失敗的消息。

文章和頁面命名空間

另請參閱 [1]

英文維基百科命名空間
基本命名空間 討論頁命名空間
0 Main 主命名空間 Talk 討論頁 1
2 User 用戶頁 User talk 用戶討論頁 3
4 Wikipedia 維基百科 Wikipedia talk 維基百科討論頁 5
6 File 文件 File talk 文件討論頁 7
8 MediaWiki MediaWiki talk MediaWiki 討論頁 9
10 Template 模板 Template talk 模板討論頁 11
12 Help 幫助 Help talk 幫助討論頁 13
14 Category 分類 Category talk 分類討論頁 15
100 Portal 門戶 Portal talk 門戶討論頁 101
108 Book 書籍 Book talk 書籍討論頁 109
虛擬命名空間
-1 Special 特殊頁
-2 Media 媒體

簡單比較

閣下可以使用 變量 和其他變量或字面符以如下語法進行比較:

  • <>—分別在左手運算數小於/大於右手運算數時返回真。
  • <=>=—分別在左手運算數小於或等於/大於或等於右手運算數時返回真。
  • == (or =) 和 !=—分別在左手運算數等於/不等於右手運算數時返回真。
  • ===!==—分別在左手運算數等於/不等於 右手運算數且左手運算數具有和右手運算數相同/不相同的數據類型時返回真。
例子 結果
1 == 2 false
1 <= 2 true
1 >= 2 false
1 != 2 true
1 < 2 true
1 > 2 false
2 = 2 true
'' == false true
'' === false false
1 = true true
1 === true false

算數符號

閣下可以使用按下列語法使用基本算術符號來進行變量和字面符的運算:

  • - — 從左手運算數里減去右手運算數。
  • + — 在左手運算數里加上右手運算數。
  • * — 將左手運算數和右手運算數相乘。
  • / — 將左手運算數除以右手運算數。
  • ** — 返回由右手運算數指定的左右運算數的指數冪。
  • % — 返回左手運算數除以右手運算數剩下的餘數。
例子 結果
1 + 1 2
2 * 2 4
1 / 2 0.5
9 ** 2 81
6 % 5 1

字符串拼接

閣下可以使用 + 的加號符號來拼接兩個字面量字符或者兩個字符串類型的變量

關鍵字

下列特別關鍵字為常用功能所包含:

  • like (或 matches) 如果左右運算數匹配右手運算數的 Glob Pattern 則返回真。
  • in 如果右手運算數包含左手運算數則返回真。
  • rlike (或 regex) 和 irlike) 如果左手運算數包含右手運算數表述的 正則表達式 模型則返回真。 (irlike 大小寫不敏感). 系統使用 PCRE 正則表達式。 僅有的啟用的 PCRE 選項是 PCRE_UTF8 (修飾符 u (在 PHP 中)); 對於 irlikePCRE_CASELESSPCRE_UTF8 均啟用了 (修飾符 iu)。
  • contains
  • if ... then ... else ... end
  • ... ? ... : ...
  • true, falsenull


例子

代碼 結果 注釋
"1234" like "12?4" True
"1234" like "12*" True
"foo" in "foobar" True
"foo" regex "\w+" True
"a\b" regex "a\\\\b" True 為了使用正則表達式查找轉義反斜槓,閣下需要使用
四個反斜槓或者兩個\x5C。 (兩者皆可)
"a\b" regex "a\x5C\x5Cb" True

函數(方法)

一些簡化常見問題解決的內建函數已經被包括。函數(方法)以 functionName( arg1, arg2, arg3 ) 這樣的方法調用,並可以在任何用字面量和變量的地方使用。它們的參數可以是字面量,變量或是別的函數(方法)。

函數名稱 描述
lcase 返迴轉換為小寫的參數。
ucase 返迴轉換為大寫的參數。
length 返回作為參數給出的字符串的長度。
string 轉換到字符串數據類型。
int 轉換到整數數據類型。
float 轉換到浮點數數據類型。
bool 轉換到布爾值數據類型。
norm 等同於 rmwhitespace(rmspecials(rmdoubles(ccnorm(arg1)))).
ccnorm 常規化參數中令人疑惑的或相近的字符,並返回一個候選形式。一個關於這些字符和替代的列表可以在這裡找到。[3] 請注意為了讓這個函數生效,擴展 AntiSpoof 需要被安裝。如果沒有安裝,則字符串不會被變更。
specialratio 返回非字母數字字符的數量除以參數中的字符總數。
rmspecials 刪除參數中的任何特殊字符,並返回結果。 (等同於 s/[^\p{L}\p{N}]//g)
rmdoubles 刪除參數中的重複字符,並返回結果。
rmwhitespace 刪除空格(空格,制表符,換行符)。
count 返回第一個字符串出現在第二個字符串中的次數。 如果只給出一個參數,則用逗號分隔它並返回段數。
rcount count 類似,但是第一個字符串使用正則表達式。可以在正則表達式開頭加入 (?i) 來使得其大小寫不敏感。
ip_in_range 如果用戶的IP(第一個字符串)匹配指定的IP範圍(第二個字符串),則返回真。 僅適用於匿名用戶。 支持IPv4和IPv6地址。
contains_any 如果第一個字符串包含以下參數中的任何字符串(無限數量的參數),則返回真。
substr 返回第一個字符串的部分,從第二個參數(從0開始)和最大長度(可選的第三個參數)偏移。
strlen length 相同。
strpos 返回第一個字符串中第二個字符串第一次出現的數字位置。函數可能在沒有找到時返回0,因此可能被其他比較運算符誤解為 false 。最佳方案應該是使用 === 或者 !== 來判斷是否找到字符串。
str_replace 用替換字符串替換所有出現的搜索字符串。該函數採用三個以下順序的參數:要執行搜索的文本,要查找的文本,替換文本。
rescape 返回帶有轉義字符 "\" 的某些字符的參數,以便該字符串可以在正則表達式中使用,但不包含具有特殊含義的字符。
set 設置一個變量(第一個字符串)的值為第二個變量(第二個參數)以用於過濾器的後期使用。 另一種語法: name := value.
set_var set 相同。

其他

  • convert 按第一個參數指定的設置返回第二個參數的變種語言。 只對具有 LanguageConverter 類的 Wiki 站點有效。 (在 rev:49399加入,需要rev:49397後的MediaWiki)

例子

代碼 結果 注釋
length( "Wikipedia" ) 9
lcase( "WikiPedia" ) wikipedia
ccnorm( "w1k1p3d14" ) WIKIPEDIA ccnorm 返回的結果永遠大寫
ccnorm( "ωɨƙɩᑭƐƉ1α" ) WIKIPEDIA
ccnorm( "ìíîïĩї!ľį₤ĺľḷĿóòôöõǒōŏǫőọ$śŝşšṣ" ) ìíîïĩї!ľį₤ĺľḷĿóòôöõǒōŏǫőọ$śŝşšṣ 不是所有字符都被常規化了[3]
norm( "!!ω..ɨ..ƙ..ɩ..ᑭᑭ..Ɛ.Ɖ@@1%%α!!" ) WIKIPEDIA
norm( "F00 B@rr" ) FOBR norm 清除了空格、特殊字符和重複字符,然後使用ccnorm
rmdoubles( "foobybboo" ) fobybo
specialratio( "Wikipedia!" ) 0.1
count( "foo", "foofooboofoo" ) 3
count( "foo,bar,baz" ) 3
rmspecials( "FOOBAR!!1" ) FOOBAR1
rescape( "abc* (def)" ) abc\* \(def\)
str_replace( "foobarbaz", "bar", "-" ) foo-baz
ip_in_range( "127.0.10.0", "127.0.0.0/12" ) true
contains_any( "foobar", "x", "y", "f" ) true

布爾運算

閣下可以匹配諸多布爾值的情況,如有且只有所有條件為真,任意一個為真,或是僅有一個為真的情況。

  • x | y — 或 – 如果一個或多個條件為真,返回真。
  • x & y — 和 – 如果兩個條件都為真,返回真。
  • x ^ y — 異或 – 如果有且僅有一個條件為真,返回真。
  • !x — 非 – 如果條件不為真,返回真。

Examples

代碼 結果
1 | 1 true
1 | 0 true
0 | 0 false
1 & 1 true
1 & 0 false
0 & 0 false
1 ^ 1 false
1 ^ 0 true
0 ^ 0 false
!1 false

運算數順序

操作通常是從左到右執行,但是執行有一個順序。一旦過濾器不能滿足其中的某個條件,它將會停止檢查餘下的(因為短路求值)並繼續檢查下一個過濾器(除了phab:T43693)。執行順序是:

  1. 任何被括號包圍的內容(())被當作單個單元執行。
  2. 將變量/字面量轉換為各自的數據。(例:設置article_namespace的值是0)
  3. 函數(方法)調用 (norm, lcase等)
  4. 一元 +-(定義正負值,比如-1234+1234
  5. 關鍵字
  6. 布爾值翻轉 (!x)
  7. 指數運算 (2**3 → 8)
  8. 乘法相關 (乘,除,取余)
  9. 加減法 (3-2 → 1)
  10. 比較 (<, >, ==)
  11. 布爾運算 (&, |, ^)

例子

  • A & B | C(A & B) | C 等同,但不和 not to A & (B | C) 等同。 具體地說,false & true | truefalse & false | true 都得到 true.
  • A | B & C(A | B) & C 等同,但不和 A | (B & C)等同。 具體地說,true | true & falsetrue | false & false 都得到 false.

條件判斷計數

條件判斷限制是一種比較運算數數量和函數(方法)調用數量的跟蹤機制。

具體關於條件判斷計數,以及如何減少條件判斷計數的信息可在 Help:濫用過濾器使用指導/條件 找到。

有用的連結

備註

  1. 1.0 1.1 1.2 只對於對於文件上載可用的變量 (action='upload') 是 user_*, article_*, file_sha1, file_size, file_mime, file_mediatype, file_width, file_height, file_bits_per_channel (最後五個在 MediaWiki 1.27 發布時添加, gerrit:281503). 其他 file_* 變量對其他操作不可用 (包括 action='edit')。
  2. 從 MediaWiki 1.28 開始可用 gerrit:295254
  3. 3.0 3.1 注意 phab:T27619. 閣下可以使用 Special:AbuseFilter/tools 來評估代碼 ccnorm( "你的字符串" )來檢查哪些字符被轉換了。