Extension:AbuseFilter/Rules format/ja

規則は、C言語、Java、Perlに類似したプログラミング言語の条件文と同様の書式です.

文字列
特定のリテラルの定義には、(文字列の場合) 半角欧文の単引用符または複引用符で挟むか、(数値は浮動小数点と整数の両方)）見た目のまま入力します(訳注：「'」もしくは「"」). 改行は 、タブ文字は  、引用符文字はバックスラッシュを付けて表記します.

1件の条件文に対して2点の文字列リテラルもしくはvarsを文字列結合するには、 (加算) 符号を用います.


 * 例:

利用者定義の変数
理解しやすいように変数のカスタム指定ができ、条件文の行内に代入符  を記入します (  でトジル). このような変数には文字、アンダースコア (_) や数字を使用でき (最初の文字を除く)、大文字と小文字は区別しません. 例 (w:Special:AbuseFilter/79 より)：

配列
AbuseFilter には非結合配列に対応し、以下の使い方ができます.

コメント
以下の構文を使いコメントを特定できます： /* これはコメントです */

算術演算子
基本的な算術符号を使用すると、次の構文で変数とリテラルの算術演算を実行できます.


 * — 左辺から右辺を減算.
 * — 右辺に左辺を加算.
 * — 左辺を、右辺の指定する指数で乗算.
 * — 左辺を右辺で除算.
 * — 左辺を、右辺の指定する指数で乗算.
 * — Return the remainder given when the left-hand operand is divided by the right-hand operand.

The type of the returned result is the same that would be returned by PHP, for which a lot of documentation may be found online. More exhaustive examples may be found in this AF parser test.

論理演算子
複数の条件のすべて、もしくはいずれか、またはたった1件の条件に限定して true である場合のみ一致します.


 * &mdash; OR – 条件のいずれかが true の場合に true を返します.
 * &mdash; AND – 条件の両方が true の場合に true を返します.
 * &mdash; XOR – 条件の片方のみが true の場合に true を返します.
 * &mdash; NOT – 条件が true ではない場合に true を返します.

例

単純な比較
以下の統語論 (syntax) を用いると、varsを他の変数やリテラルと比較できます：


 * &mdash; 左辺の被害演算子が右辺のそれぞれよりも小さい/大きい 場合、true を返します. Watch out: operands are casted to strings and, like it happens in PHP,   and.
 * &mdash; 左辺の被害演算子が右辺のそれぞれより小さいか等しい/より大きいか等しい 場合、true を返します. Watch out: operands are casted to strings and, like it happens in PHP,   and.
 * (または ) と   &mdash; 左辺の被害演算子が右辺のそれぞれと等しい/等しくない 場合、true を返します.
 * &mdash; 左辺が右辺のそれぞれと等しい/等しくない 場合で、しかも左辺のデータタイプが右辺のそれぞれと 等しい/等しくない 場合、true を返します.

組み込みの変数
不正利用フィルターでは、さまざまな変数をその変数名でパーサーに渡せます. これらの変数へは、リテラルを使用できるような場所に入力することでアクセスできます. 不正利用記録内の各リクエストに関連付けられた変数を閲覧することもできます.

注記
When, only the  ,  ,   and   variables are available. The  variables are also available, but the prefix is replaced by   and , that represent the values of the original article name and the destination one, respectively. For example,  and   instead of.

Since MediaWiki 1.28 (https://gerrit.wikimedia.org/r/#/c/295254/),  is only used when publishing an upload, and not for uploads to stash. A new  is introduced, which is used for all uploads, including uploads to 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 will allow 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.

パフォーマンス
As noted in the table above, some of these variables can be very slow. フィルタの記述において、条件文の制限はフィルタの重さを図るのに不適切である点にご留意ください. For instance, variables like  or   always need a DB query to be computed, while   variables will have to perform parsing of the text, which again is a heavy operation; all these variables should be used very, very carefully. たとえばイタリア語ウィキペディアで測定したところ、有効なフィルタ135件に対して使用される条件文は平均450件で、フィルタ実行時間はおよそ500ミリ秒、最長で15秒に至ります. Removing the  variable from a single filter, and halving the cases when another filter would use   brought the average execution time to 50ms. More specifically:

Last but not least, note that whenever a variable is computed for a given filter, it'll be saved and any other filter will immediately retrieve it. This means that one single filter computing this variable counts more or less as dozens of filters using it.
 * Use  variables when you need high accuracy and checking for "http://..." in other variables (for instance,  ) could lead to heavy malfunctioning;
 * Use  variables when you're really sure that non-PST variables aren't enough. You may also conditionally decide which one to check: if, for instance, you want to examine a signature, check first if   contains  ;
 * 一般論としてこれら変数の取り扱いには常に条件を増やすことはしても、重くしたものを計算処理にかけることは避けます. In order to achieve this, always put heavy variables as last conditions.

キーワード
The following special keywords are included for often-used functionality:


 * (または ) は、左辺が右辺のグロブパターンに一致する場合に true を返します.
 * は、右辺 (文字列) が左辺を含む場合に true を返します. 注: empty strings are not contained in, nor contain, any other string (not even the empty string itself).
 * は  に似た役割をしますが、右辺と左辺が入れ替わります.  注: empty strings are not contained in, nor contain, any other string (not even the empty string itself).
 * (または )、  は、左辺が右辺の正規表現に一致する (含む) 場合に true を返します (  は大文字を区別しません (insensitive)).

このシステムは PCRE を使用します. The only PCRE option enabled is  (modifier   in PHP); for   both   and   are enabled (modifier  ).



例

関数
よくある問題への対応をを容易にするために多くの関数が内蔵されています. これらは  のような一般的な形式で実行できます. 関数は、リテラル、変数の代わりに使用できます. 引数として、リテラル、変数を渡すことができ、さらに他の関数も渡せます.

演算の順序
一般に、演算は左から右へ実行されますが、演算が解決される際の順序があります. フィルターが条件のいずれかの処理に失敗すると、(短絡評価により) 残りの部分のチェックは停止され、次のフィルターに移ります. 評価順序は以下のようになります:


 * 1) 括弧 (  と  ) で囲まれている文字列は単一の単位として評価されます.
 * 2) 変数やリテラルをそれぞれのデータに変換.  (例:   を 0 に変換)
 * 3) 関数呼び出し ( 、 、など)
 * 4) 単項演算子  、  (正の数値・負の数値として  、  のような形で)
 * 5) キーワード ( 、  など)
 * 6) 論理値の反転
 * 7) べき乗
 * 8) 乗算、除算、剰余
 * 9) 加算、減算
 * 10) 比較.
 * 11) 論理演算子.

例

 * は  と等価ですが、  とは等価ではありません.  具体的には、  と   はどちらも   と等価です.
 * は  と等価ですが、  とは等価ではありません.  具体的には、  と   はどちらも   と等価です.

条件のカウント
条件制限は (多かれ少なかれ) 比較演算子の数と入力された関数呼び出しの数を加算した件数分の追跡です.

使用する条件文を減らすことに関して、詳細はをご参照ください.

除外
編集フィルタ検証関数は「巻き戻し」行為を編集として検知しますが、このフィルタは巻き戻し行為を一致対象として評価はしません.

有用なリンク

 * PCRE パターン構文
 * さまざまなローカルのウィキプロジェクト群に役立つフィルタを編集