Extension:AbuseFilter/Rules format/ja

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

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

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


 * 例:

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

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

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

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


 * — 左辺から右辺を減算.
 * — 右辺に左辺を加算.
 * — 左辺を、右辺の指定する指数で乗算.
 * — 左辺を右辺で除算.
 * — 左辺を、右辺の指定する指数で冪乗.
 * — 左辺を右辺で除算した余りを返す.

返す結果は PHP が返すタイプと同等で、ウェブ上には解説が多くあります. 例をこのAFパーサーテストにもっと包括的にまとめてあります.

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


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

例

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


 * &mdash; 左辺の被害演算子が右辺のそれぞれよりも小さい/大きい 場合、true を返します. ご注意：被演算子は文字列にキャストされ、PHPで発生するように、 および.
 * &mdash; 左辺の被害演算子が右辺のそれぞれより小さいか等しい/より大きいか等しい 場合、true を返します. ご注意：被演算子は文字列にキャストされ、PHPで発生するように、 および.
 * (または ) と   &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. たとえば  か   を   で代行.

MediaWiki 1.28 (https://gerrit.wikimedia.org/r/#/c/295254/) 以降、 はアップロードの公開に使われ、すたっしゅへのアップロードは対象外です. 新規に導入された  は、あらゆるアップロードに適用されスタッシュへのアップロードも対象です. これは役割が過去の  に似ており、ファイルのメタデータ変数  のみ返します. ページ編集に関連する変数は  と   およびその他いくつかを含め、  で利用できるようになりました. アップロード1件ごとにフィルター  が呼び込まれるときは常に   と一緒です (スタッシュへのアップロードの場合). では呼び込みません.

フィルタ執筆者はフィルタのコードで  を使用するべきで、ファイルの内容のみ対象にファイルを検査する場合がこれに該当し – たとえば低解像度ファイルの掲載を拒否する場合 –   が使えるのは編集におけるウィキ文の部分の検証も必要な場合に限ります – 一例として説明のないファイルを掲載拒否する場合. これはファイルアップロード時にファイル本体のアップロードと公開を分離するツール (例えばアップロード ウィザードもしくは同ダイアログ) から利用者にすぐに通知し、無駄にアップロード詳細の記入をしなくて済むようにできます.

パフォーマンス
上記の表内で説明した通り、これらの中には非常に時間がかかる変数があります. フィルタの記述において、条件文の制限はフィルタの重さを図るのに不適切である点にご留意ください. 一例として変数  や   は常にDBクエリの演算を求めますが、変数   が求めるテキストの解析実行もまた、重い操作です. これらの変数すべての使用は、非常に慎重に扱う必要があります. たとえばイタリア語ウィキペディアで測定したところ、有効なフィルタ135件に対して使用される条件文は平均450件で、フィルタ実行時間はおよそ500ミリ秒、最長で15秒に至ります. 単一のフィルタから  変数を除去すると、別のフィルターで   を使用した場合より件数を半減させ、平均実行時間を50ミリ秒に縮めました. 詳細の説明：

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.
 * 高精度を求める場合は  変数を使用、重く誤動作に結びつきがちな「http://...」を他の変数から検出 (例：  ).
 * 非常 PST 変数だけでは不十分だと感じる場合は、 変数を使います.  You may also conditionally decide which one to check: if, for instance, you want to examine a signature, check first if   contains  ;
 * 一般論としてこれら変数の取り扱いには常に条件を増やすことはしても、重くしたものを計算処理にかけることは避けます. これを実現するには、重い変数を条件文の末尾に置きます.

キーワード
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 パターン構文
 * さまざまなローカルのウィキプロジェクト群に役立つフィルタを編集