Extension:AbuseFilter/Rules format/zh

該規則是自定義的語言，其格式与类C／JAVA／Perl语言的条件式十分相近.

字符串
宣告变量时，你可以将值填写在单引号或双引号中（字符串常量），亦可直接填写（数字变量，包括整型与浮点型浮點數）. 你可以使用 插入换行字元、 插入製表符（Tab），也可以使用半形反斜線来跳脫引號字元.

使用 （加號）來串接兩個字串常數或字串值的變數.


 * 範例:

用戶自訂變數
你可以定義自訂的變數，只要在一行中使用賦值符號 （以 結尾）並跟隨一個條件. 這些變數可以使用字母、底線和數字（除第一個字符外），並且不區分大小寫. 例如（來自w:Special:AbuseFilter/79）：

陣列
防濫用過濾器支援非關聯式陣列，如以下範例一樣使用.

註解文字
您可以使用以下語法來加入註解：

算术
你可以使用基本的算术符号对變數和常數进行算术运算，语法规则如下：


 * — 用左運算元减去右運算元.
 * — 将左、右運算元相加.
 * — 将左、右運算元相乘.
 * — 用右運算元來除左運算元.
 * — 对左運算元求幂，幂次由右運算元指定.
 * — 回傳左運算元除以右運算元后的余数.

回傳結果的類型與PHP回傳的結果相同，可以在線上找到大量說明文件. 更多詳盡的例子可以在此AF解析器測試中找到.

布林运算
你可以要求满足所有条件为真，或满足任一条件为真，或只满足任一条件为真.


 * &mdash; OR – 如果两个条件中有一个或多个为真，则傳回True.
 * &mdash; AND – 如果两个条件中所有条件都为真，则返回真值True.
 * &mdash; XOR – 如果两个条件中当且仅当一个条件为真，则返回真值True.
 * &mdash; NOT – 如果条件为假，则回傳True.

範例

简单的比较
你可以将變數与其他變數进行比较及運算，以下是语法规则：


 * &mdash; 如果左運算元分別小於／大於右運算元，則返回true. 注意：運算元會被轉換為字串，就如同在PHP發生的一樣，且.
 * &mdash; 如果左運算元分別小於或等於／大於或等於右運算元，則回傳true. 注意：運算元會被轉換為字串，就如同在PHP發生的一樣，且.
 * （或 ）、 &mdash;如果左運算元分別等於／不等於右運算元，則回傳true.
 * &mdash;如果左運算元等於右運算元且左運算元的資料類型等於右運算元的資料類型，則回傳true，只要有一個不符合，回傳false.

內建變數
防滥用过滤器可以根据變數的名称将各种變數传送给解析器. 你可以输入这些變數的名称来取用它们，就像取用常數一样. 在过滤日志中，你还可以看到各种请求的相关變數.

注意事項
當 ，只有 、 、 和 變數可用. 變數仍然可用，但其前綴已被取代為 和 ，以分別表示頁面的原本名稱和目標名稱的值. 例如 和 ，而不是.

自MediaWiki 1.28（295254）起， 僅用於發佈上傳檔案時，不再用於上傳至stash時. 新加入的 用於所有上傳行為，包括上傳至stash. This behaves like  used to, and only provides file metadata variables. Variables related to the page edit, including,   and several others, are now available for. For every file upload, filters may be called with  (for uploads to stash), and are always called with  ; they are not called with.

Filter authors should use  in filter code when a file can be checked based only on the file contents – for example, to reject low-resolution files – and   only when the wikitext parts of the edit need to be examined too – for example, to reject files with no description. This allows tools that separate uploading the file and publishing the file (e.g. UploadWizard or upload dialog) to inform the user of the failure before they spend the time filling in the upload details.

效能
如同前面的記載，某些變數可能使速度變得非常慢. 在编写过滤器时，请记住条件限制不是衡量过滤器性能高下的好指标. 例如，像  或   这样的变量始终需要执行数据库查询，而   变量将必须执行文本解析，这又是一个繁重的操作；所有这些变量都应该非常非常小心地使用. 例如，在意大利语维基百科上已经观察到，有135个启用的过滤器并平均使用450个条件，过滤器执行时间约为500毫秒，峰值达到15秒. 从单个过滤器中删除  变量，并在另一个过滤器将使用   的情况减半，则平均执行时间为50毫秒. 進一步來說：

通常，在处理这些变量时，使用更多条件总是比计算繁重的变量来得好. 为了实现这一点，始终将繁重的变量作为最后条件. 最后，请注意，只要为给定过滤器计算了一个变量，便会保存该变量，任何其他过滤器都能够立即检索它. 这意味着一但有一个过滤器计算了这个变量，和数十个过滤器使用它的消耗基本相同.
 * 仅当需要高准确性，并且在其他变量（例如 ）中检查"http://..."将会导致严重误判时，使用   变量.
 * 仅当您确实确定非PST变量还不够时，使用  变量.  您也可以有条件地决定检查哪个变量：例如，如果您要检查一个签名，请首先检查 是否包含 ；

關鍵字
常用功能中通常會包含以下特殊關鍵字：


 * （或 ）— 如果左字符串能够匹配右字串指定的萬用字元，则傳回真值True.
 * — 如果左字串包含右字串，则傳回真值True. 注意： 空字串不被包含在任何其他字串，亦不包含任何其他字串（甚至不包含空字串本身）.
 * 類似 ，但左右運算子交換位置. 注意： 空字串不被包含在任何其他字串，亦不包含任何其他字串（甚至不包含空字串本身）.
 * （或 ）和 — 如果左字串能够匹配右字串指定的正規表示式，则傳回真值True（ 不區分大小寫）.
 * 此系統使用PCRE.
 * 只有 （PHP修飾字 ）選項被啟用. 有 和 選項被啟用（修飾字 ）.

範例

函式
为了简化一些常见的操作，防滥用过滤器提供了一系列内建的函式. 它们具有相同的格式 ，并且可以放置在常數或變數的位置使用. 它的参数可以是常數，可以是變數，亦可以是别的函式.

运算的顺序
运算通常是按由左至右的顺序進行的，但各运算的優先度并不相同. 當過濾器判斷某條件不符合時，會停止檢查之後的條件（由於短路求值）並移動至下一個過濾器. 運算顺序如下：


 * 1) 由半形小括號（ 与 ）括住的内容会被作为一个独立单元首先运算出.
 * 2) 将常數/常量转换为它们所代表的資料. （如 變成0）
 * 3) 呼叫函式 （ 、 等）
 * 4) 進行 和 的一元運算（定義正值或負值，例： ， ）
 * 5) 關鍵字 ( 、 等. )
 * 6) 布林反轉
 * 7) 求幂
 * 8) 乘法相关（乘、除、餘數）
 * 9) 加减法
 * 10) 比较.
 * 11) 布林运算

範例

 * 等同於 ，不同於 . 需特別留意， 和 的計算結果都是.
 * 等同於 ，不同於 . 需特別留意， 和 的計算結果都是.
 * is wrong, use  instead.

條件計數
The condition limit is (more or less) tracking the number of comparison operators + number of function calls entered.

Further explanation on how to reduce conditions used can be found at.

排除
儘管防濫用過濾器的檢查功能會將「回退」操作標示為編輯，但防濫用過濾器不會檢查回退操作.

实用链接

 * PCRE模式語法
 * 跨維基編輯過濾器的好處