-
Notifications
You must be signed in to change notification settings - Fork 31
Как работает маска
Маска позволяет форматировать последовательности символов с помощью связного списка слотов.
Маска не занимается созданием слотов (за исключением случаев клонирования слота в нетерминированной
маске, (см. ниже). Для получения форматированного текста, текст должен быть вставлен в маску с помощью методов
Mask#insertAt()
или Mask#insertFront()
. Для получения форматированной
строки необходимо вызвать метод Mask#toString()
.
Для создания маски необходимы два параметра:
- Массив слотов. Маска преобразовывет слоты в двусвязый список и хранит в в нем введенный текст.
- Флаг терминированности. Определяет, возможна ли вставка символов когда все слоты заполнены.
Данный флаг определяет возможна ли вставка символов в маску, когда все слоты заполнены (см. приверы 1 и 2). Если маска нетерминирована, последний слот будет бесконечно копироваться, удлиняя маску. Это позволяет делать маски "бесконечной" длины. Однако символы, вставленные "сверх нормы", форматированы не будут.
Кроме списка слотов и флага терминированности маска обладает некоторыми настраиваемыми параметрами:
-
forbidInputWhenFilled
- еслиtrue
, запрещает вставку в маску новых символов. Еслиfalse
, при вставке в середину заполненной маски, новые символы будут "выталкивать" символы из конца маски. По умолчанию -false
. -
hideHardcodedHead
- еслиtrue
скрывает hardcoded последовательность в начале строки при отсутствии пользовательсткого ввода (см. пример ниже) при вызовеtoString()
. По умолчанию -false
. -
showingEmptySlots
- еслиtrue
и в маске есть незаполненные слоты, то эти слоты будут выведены вtoString()
. ВАЖНО: когда данный флаг выставлен вtrue
, флагhideHardcodedHead
игнорируется. По умолчанию -false
-
placeholder
- символ, которым заменяются пустые пустые слоты при вызовеtoString()
когдаshowingEmptySlots = true
. По умолчанию_
(нижнее подчеркивание).
Пример 1:
Mask mask = MaskImpl.createTerminated(PredefinedSlots.RUS_PHONE_NUMBER); // +7 (___) ___-__-__
System.out.println(mask.toString()); // +7 (
Пример 2:
Mask mask = MaskImpl.createTerminated(PredefinedSlots.RUS_PHONE_NUMBER); // +7 (___) ___-__-__
mask.setHideHardcodedHead(true);
System.out.println(mask.toString()); // nothing
В примерах выше произодится вывод пустой (без пользовательского ввода)
маски для ввода номера телефона. Данная маска имеет hardcoded-последовательность в начале - "+7 (".
В примере 1 будет выведена эта последовательность, т.к. hideHardcodedHead = false
, в примере 2
не будет выведено ничего, т.к. hideHardcodedHead = true
.
Пример 3:
Mask mask = MaskImpl.createTerminated(PredefinedSlots.RUS_PHONE_NUMBER);
mask.setShowingEmptySlots(true);
mask.setPlaceholder('*');
mask.insertFront("999");
System.out.println(mask.toString()); // +7 (999) ***-**-**
Для получения неформатированной строки используется метод Mask#getUnformattedString(boolean)
.
Данный метод возвращает строку из значений всех слотов, за исключением декоративных (см. Что такое слот).
Пример 4: получение неформатированной строки
Mask mask = MaskImpl.createTerminated(new Slot[]{
PredefinedSlots.digit(), // слот для цифры
PredefinedSlots.digit(), // слот для цифры
PredefinedSlots.hardcodedSlot('-').withTags(Slot.TAG_DECORATION), // декоративный hardcoded слот
PredefinedSlots.digit(), // слот для цифры
PredefinedSlots.digit(), // слот для цифры
});
mask.insertFront("1234");
System.out.println(mask.toString()); // 12-34
System.out.println(mask.toUnformattedString()); // 1234
Пример 5: получение неформатированной строки
Mask mask = MaskImpl.createTerminated(PredefinedSlots.RUS_PHONE_NUMBER);
mask.insertFront("9995554433");
System.out.println(mask.toString()); // +7 (999) 555-44-33
System.out.println(mask.toUnformattedString()); // +79995554433