Extension:AbuseFilter/Rules format/ru

Правила фильтра злоупотреблений пишутся на C/Java/Perl-подобном языке.

Литералы
Вы можете задать литералы, поместив их в кавычки (для строк), или набрав их как есть (для чисел с плавающей точкой и целых чисел). Вы можете использовать разрывы строк с помощью \n, символ табуляции с помощью \t, а также использовать символ кавычки с обратным слешем. "Это строка" 'Это также строка' 'Эта строка\' также верная' "Эта строка\nИмеет перевод строки" 1234 1.234 -123
 * Примеры:

Переменные
Фильтр злоупотреблений передаёт парсеру различные переменные. Эти переменные можно получить, введя их имя в месте, где будут работать литералы. Вы можете просмотреть в журнале злоупотреблений переменные, связанные с каждым запросом. USER_EDITCOUNT ARTICLE_RECENT_CONTRIBUTORS
 * Примеры:

Допустимые переменные действий —,  ,   или.

Сравнения
Вы можете сравнивать переменные с другими переменными и литералами, используя следующий синтаксис:
 * &lt; и &gt; &mdash; возвращает true, если левый операнд соответственно меньше/больше, чем правый операнд.
 * &lt;= и &gt;= &mdash; возвращает true, если левый операнд соответственно меньше или равен/больше или равен, чем правый операнд.
 * == и != &mdash; возвращает true, если левый операнд соответственно равен/не равен правому операнду.

Арифметические действия
Вы можете использовать основные арифметические символы для выполнения арифметических операций над переменными и литералами, используя следующий синтаксис:
 * -</tt> &mdash; вычесть правый операнд из левого оператора.
 * +</tt> &mdash; прибавить правый операнд к левому операнду..
 * *</tt> &mdash; умножить левый операнд на правый операнд.
 * /</tt> &mdash; разделить левый операнд на правый операнд.
 * **</tt> &mdash; возвести левый операнд в степень, определённую правым операндом.
 * %</tt> &mdash; вернуть остаток при делении левого операнда на правый операнд.

Ключевые слова
Ключевые слова включены для часто используемых функций
 * like</tt> возвращает true, если левый операнд соответствует с правым операндом с glob.
 * in</tt> возвращает true, если правый операнд (строка) содержит левый операнд.
 * rlike</tt> и regex</tt> возвращает true, если левый операнд совпадает с регулярным выражением в правом операнде.

"1234" like "12?4" Результат: True "1234" like "12*" Результат: True "foo" in "foobar" Результат: True "foo" regex "\w+" Результат: True
 * Примеры:

Функции
Для использования в обычных ситуациях включены некоторые встроенные функции. Они выполняются в формате имяФункции(арг1,арг2,арг3)</tt>, и могут быть использованы вместо любого литерала или переменной. Аргументами могут быть литералы, переменные или другие функции.
 * length</tt> возвращает длину строки, данной в первом аргументе.
 * lcase</tt> возвращает первый аргумент, преобразованный в нижний регистр.
 * ccnorm</tt> нормализует спорные/сходные символы в аргументе и возвращает каноническую форму.
 * convert</tt> возвращает второй аргумент, преобразованный в языковой вариант, определённый в первом аргументе. Применимо ТОЛЬКО в вики с классом LanguageConverter. (новая функция, добавленная в 49399, необходима поддержка MediaWiki после 49397)
 * rmdoubles</tt> удаляет повторяющиеся символы в аргументе и возвращает результат.
 * <tt>rmwhitespace</tt> удаляет пробелы (пробелы, табуляции, новые строки)
 * <tt>specialratio</tt> возвращает число не буквенно-цифровых символов, разделённое на количество символов в первом аргументе.
 * <tt>rmspecials</tt> удаляет любые специальные символы в первом аргументе и возвращает результат.
 * <tt>norm</tt> является эквивалентом <tt>rmwhitespace(rmspecials(rmdoubles(ccnorm(arg1))))</tt>.
 * <tt>count</tt> возвращает количество игл (первая строка), появившихся в стоге сена (вторая строка). Если указан только один аргумент, разделяет его запятыми и возвращает количество сегментов.

length("Wikipedia") Результат: 9 lcase("Wikipedia") Результат: wikipedia ccnorm("ωɨƙɩᑭƐƉlα") Результат: W1K1PED1A convert("zh-hant", "维基百科") // assume we work on a wiki with Chinese LanguageConverter class Результат: 維基百科 rmdoubles( "foobybboo" ) Результат: fobybo specialratio("Wikipedia!") Результат: 0.1 norm( "!!ω..ɨ..ƙ..ɩ..ᑭᑭ..Ɛ.Ɖ@@l%%α!!" ) Результат: W1K1PED1A count( "foo", "foofooboofoo" ) Результат: 3 count( "foo,bar,baz" ) Результат: 3 rmspecials( "FOOBAR!!1" ) Результат: FOOBAR1
 * Примеры:

Булевы операции
Вы можете вызвать срабатывание фильтра, если только все условия верны, одно или больше из условий является верным или только одно из условий является верным.
 * <tt>x | y</tt> &mdash; ИЛИ – возвращает true, если одно или больше условий являются верными.
 * <tt>x & y</tt> &mdash; И – возвращает true, если оба условия являются верными.
 * <tt>x ^ y</tt> &mdash; ИСКЛЮЧАЮЩЕЕ ИЛИ – возвращает true, если только одно условие является верным.
 * <tt>!x</tt> &mdash; НЕ – возвращает true, если условие неверно.

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

Порядок операций
Обычно операции выполняются слева направо, но существует порядок, в котором они будут исполнены. Когда расширение не может проверить одно из условий фильтра, оно останавливает проверку остальных и переходит к следующему фильтру. Порядок вычисления:
 * 1) Всё, окружённое скобками (<tt>(</tt> and <tt>)</tt>) оценивается как одна едииница.
 * 2) Касающееся переменных/литерал и их данных (например, <tt>article_namespace</tt> к 0)
 * 3) Вызовы функций (<tt>norm</tt>, <tt>lcase</tt>, и т. д.)
 * 4) Унарные + и - (например, <tt>-1234</tt>, <tt>+1234</tt>)
 * 5) Ключевые слова
 * 6) Булева инверсия (<tt>!x</tt>)
 * 7) Возведение в степень (<tt>2**3 > 8</tt>)
 * 8) Действия, связанные с умножением (multiplication, division, modulo)
 * 9) Сравнения (<tt><</tt>, <tt>></tt>, <tt>==</tt>)
 * 10) Булевы операции (<tt>&</tt>, <tt>|</tt>, <tt>^</tt>, <tt>in</tt>)