Генератор symbol
Когда брать. Нужна строка заданной длины из конкретного набора символов —
токен, купонный код, случайный суффикс, «шум» на нужной письменности. symbol
берёт по одному символу из набора, который вы задаёте. (Для целого слова
из списка вместо этого используйте text.)
Набор символов задаётся одним из двух способов — но никогда обоими сразу:
value— перечислить свой набор прямо здесь;alphabet— назвать встроенный Unicode-алфавит.
Затем length задаёт, сколько символов выдать, а include / exclude
подстраивают набор, не переписывая его целиком.
Примеры вывода на этой странице иллюстративны — конкретные символы зависят от сида и могут отличаться между версиями ядра. Стабильны сами правила, которые эти примеры демонстрируют.
Коротко
| Атрибут | Обязательный | Что делает |
|---|---|---|
value | один из двух | Свой набор символов (литералы + диапазоны [x-y]) |
alphabet | один из двух | Имя встроенного Unicode-алфавита |
length | нет | Длина строки; по умолчанию 1, максимум 1024 |
include | нет | Добавить символы к набору (та же грамматика, что и value) |
exclude | нет | Убрать символы из набора |
Свой набор через value
Самый простой путь: перечисляете нужные символы в value. Регулярные выражения
не нужны — вы пишете набор, а symbol тянет из него.
<gen type="symbol" value="ABCDEF" length="4"/> <!-- литералы -->
<gen type="symbol" value="[a-z]" length="6"/> <!-- диапазон -->
<gen type="symbol" value="[A-Z0-9]" length="8"/> <!-- два диапазона в одной группе -->
<gen type="symbol" value="[a-f]xY[0-9]" length="5"/> <!-- диапазоны + литералы вместе -->
value="ABCDEF" length="4" → CDFA value="[a-z]" length="6" → tqmboa value="[A-Z0-9]" length="8" → K7QW2ZP4 value="[a-f]xY[0-9]" length="5" → x3bYa
Правила набора
- Литералы — просто пишете символы:
value="ABCDEF"→ набор{A, B, C, D, E, F}. - Диапазоны — в квадратных скобках:
[a-z],[A-Z],[0-9]. В одной группе можно смешивать несколько диапазонов:[a-z0-9_]. - Запятые и пробелы вне скобок игнорируются — они нужны только для
читаемости:
value="[a-f], [0-5]"— тот же набор, чтоvalue="[a-f][0-5]". Чтобы взять запятую или пробел как символ, положите их в скобки:[,],[ ]. - Дубликаты убираются, порядок сохраняется.
value="AABB"— это просто{A, B}.
Работают любые символы любого языка — ASCII не ограничивает. Ниже раздел «Именованные алфавиты» — ярлык для целых письменностей, а «Unicode-письменности вручную» — если хотите набрать их напрямую.
symbol берёт по одному символу. Чтобы выбрать целое слово из списка,
используйте text: <gen type="text" value="red,green,blue"/>.
Длина
length задаёт, сколько символов выдать. По умолчанию 1, максимум 1024.
Пригодится, когда нужен токен фиксированной ширины — 6-значный код, ключ на
32 символа и так далее.
<gen type="symbol" value="[A-Z0-9]"/> <!-- length опущен → 1 -->
<gen type="symbol" value="[A-Z0-9]" length="6"/>
<gen type="symbol" value="[A-Z0-9]" length="16"/>
length опущен → K length="6" → Q7ZW2P length="16" → K7QW2ZP4M9RXB3TA
Здесь поддерживается только точная длина. Если нужна строка переменной длины,
диапазоны и группы длины принимает number — у symbol их нет.
Расширить набор через include
Чтобы не переписывать весь набор ради пары символов, передайте их в include. Он
использует ту же грамматику, что и value (литералы и диапазоны [x-y]).
Особенно полезно с именованным алфавитом, который иначе жёстко фиксирован —
например, буквы плюс цифры для логин-подобной строки.
<!-- свои буквы плюс две конкретные цифры -->
<gen type="symbol" value="[a-z]" include="2,4" length="8"/>
<!-- готовый алфавит, расширенный недостающими цифрами -->
<gen type="symbol" alphabet="latin.lower" include="[0-9]" length="8"/>
value="[a-z]" include="2,4" length="8" → t2qm4boa alphabet="latin.lower" include="[0-9]" → k7qw2zp4
Подрезать набор через exclude
Зеркальный случай: exclude убирает символы из набора. Удобно, чтобы выкинуть из
кода похожие символы (никаких O/0, никаких l/1) или срезать пару букв из
именованного алфавита.
<!-- буквы и цифры без путающих пар -->
<gen type="symbol" value="[A-Z0-9]" exclude="O0Il1" length="8"/>
<!-- буквы без одной -->
<gen type="symbol" value="[a-z]" exclude="y" length="8"/>
value="[A-Z0-9]" exclude="O0Il1" length="8" → K7QW2ZP4 value="[a-z]" exclude="y" length="8" → tqmboade
Как include и exclude сочетаются
Итоговый набор — это (база ∪ include) − exclude, поэтому последнее слово за
exclude: символ, который одновременно добавлен через include и убран через
exclude, в результате не появится. Если после модификаторов набор
оказывается пустым — это ошибка TDC099.
<!-- 4 добавлена, затем убрана → она проигрывает; 2 остаётся -->
<gen type="symbol" value="[a-z]" include="2,4" exclude="4" length="8"/>
value="[a-z]" include="2,4" exclude="4" → t2qmboad (4 нет нигде)
Именованные алфавиты через alphabet
Когда брать. Нужна случайная строка из конкретной письменности — кириллица
для русских логинов, кана для японских тестовых данных, арабские или ивритские
буквы для проверки RTL-вёрстки. Писать диапазон Unicode вручную ([а-я]) легко с
ошибкой: забудете ё или промахнётесь мимо границы. Именованный алфавит
проверяется по имени и содержит ровно нужные символы.
alphabet заменяет value — вы даёте имя из реестра плюс length.
<gen type="symbol" alphabet="cyrillic.ru.letters" length="10"/>
<gen type="symbol" alphabet="kana.hiragana" length="8"/>
<gen type="symbol" alphabet="arabic.letters" length="6"/>
cyrillic.ru.letters length="10" → рнБСпВЖЧжХ kana.hiragana length="8" → ゃまぃすめいおち arabic.letters length="6" → فؿآحـآ
Это намеренная демонстрация Unicode/локализации: вывод не латинский специально — чтобы показать, что один и тот же генератор выдаёт любую названную письменность.
Живые примеры письменностей
Один и тот же генератор, по одной строке на алфавит (length="10") — чтобы
сравнить письменности рядом:
alphabet | Пример вывода |
|---|---|
latin.lower | usahtbcjpi |
latin.upper | USAHTBCJPI |
digits.fullwidth | 7702701363 |
cyrillic.ru.letters | рнБСпВЖЧжХ |
greek.letters | ξμΒΟνΓΖΤζΡ |
hebrew.letters | פףאחפבגךני |
arabic.letters | فؿآحـآإذغد |
kana.hiragana | ゃまぃすめいおちふそ |
kana.katakana | ユメィズヤイオヂヘタ |
cjk.unified.basic | 货袪倱料護冣囱沌耣楿 |
roman.upper | DDIXDIIXCX |
Все поддерживаемые имена
alphabet | Что содержит |
|---|---|
latin.lower | ASCII a-z |
latin.upper | ASCII A-Z |
latin.letters | ASCII A-Z и a-z |
digits.ascii | ASCII-цифры 0-9 |
digits.fullwidth | Полноширинные цифры 0-9 |
cyrillic.ru.lower | Русская кириллица а-я плюс ё |
cyrillic.ru.upper | Русская кириллица А-Я плюс Ё |
cyrillic.ru.letters | Русская кириллица в обоих регистрах, включая ё |
greek.letters | Базовые греческие буквы |
hebrew.letters | Иврит א-ת |
arabic.letters | Арабские буквы ء-ي |
kana.hiragana | Японская хирагана ぁ-ゖ |
kana.katakana | Японская катакана ァ-ヺ |
cjk.unified.basic | CJK Unified Ideographs U+4E00..U+9FFF |
roman.upper | Символы римских чисел I V X L C D M |
roman.lower | Символы римских чисел i v x l c d m |
Все 16 имён проверены: каждое резолвится и выдаёт символы своей письменности.
Набор фиксирован, поэтому подстраивайте его через include / exclude — например
alphabet="cyrillic.ru.letters" exclude="ъь".
Unicode-письменности вручную
Именованный алфавит использовать не обязательно: раз value принимает любые
символы, письменность (или смесь нескольких) можно набрать напрямую. Там, где
именованный алфавит есть, он всё же предпочтительнее: он документирован,
валидируется и включает неудобные символы, которые простой диапазон пропустит
(например, русскую ё).
<gen type="symbol" value="[А-Я]" length="4"/> <!-- кириллический диапазон -->
<gen type="symbol" value="कखगघचछ" length="3"/> <!-- литералы деванагари -->
<gen type="symbol" value="あア[0-9][A-F]" length="6"/> <!-- микс скриптов + диапазоны -->
value="[А-Я]" length="4" → ШФПР value="कखगघचछ" length="3" → चचग value="あア[0-9][A-F]" length="6" → アB4あ7ア
Те же алфавиты в regex
Реестр алфавитов доступен и внутри regex, и внутри
advanced_regex через escape \a{name} — так можно
встроить именованную письменность в бо́льший паттерн:
<gen type="regex" value="\a{kana.hiragana}{5}"/>
まぃすめい ほゆすを さしぃぷ
Обычные BMP-диапазоны вроде [а-я]{8} тоже работают внутри regex, но
именованные алфавиты предпочтительнее по тем же причинам, что и выше: они
документированы, валидируются по имени и покрывают символы, которые голый
диапазон пропустит.
Смотрите также
alphabetиlengthв справочнике атрибутов.- Regex — когда у строки есть структура, а не просто набор символов.
- Маски и регистр — переформатировать сгенерированную строку постфактум.