Ограничение на количество символов

Как правило, наличие в фильме полей ввода, предназначенных для задания пользователем некоторых параметров, подразумевает, что данные в них будут прописаны в определенном формате. Например, если в поле должен быть введен возраст, то это число не может быть длиннее 2 знаков (столетние бабушки редко пользуются Интернетом, поэтому их можно не учитывать), значение в поле веса не может превышать 3 знаков и т.д. Если пользователь — по ошибке или из баловства — введет в поле необоснованно длинное или излишне короткое значение, то в алгоритме может случиться сбой. Чтобы этого избежать, зачастую необходимо задавать ограничение на наибольшее или наименьшее количество знаков, которые могут быть введены в поле.

Предупредить введение в поле излишне длинного значения очень просто. Для этого нужно прописать максимально допустимое количество знаков в окошке Maximum Characters Инспектора Свойств поля. По умолчанию в данном окошке отображается значение 0. Вопреки логике это означает, что ограничений на количество вводимых знаков не имеется. Минимальный лимит, который можно задать, составляет 1 знак, максимальный — 65535 (0xFFFF).

Ограничить количество символов, которые могут быть введены в поле типа Input, можно и программно.


Для этого предназначено специальное свойство класса TextField maxChars. Его значением является максимально допустимое для введения число символов (от 1 до 65535). Если maxChars равно 0 (или null), то лимита на длину вводимой строки не существует (принятое по умолчанию значение). Пример:

this.createTextField("pole", 0, 100, 100, 30, 20);
pole.type="input", pole.border=true; // Делаем поле полем ввода и
// активизируем отображение рамки
pole.maxChars=3; // Ограничиваем число вводимых знаков тремя

Ограничения на максимальное число символов не действуют, если текст выводится в поле программно, переопределением свойства text или переменной поля.

Не допустить введения пользователем слишком короткой строки также очень просто. Для этого, перед тем как обработать полученное из поля значение, нужно проверить, сколькими символами оно образовано. Если окажется, что их необоснованно мало, то необходимо отклонить заполненную форму, выведя сообщение с просьбой исправить ошибки.

Узнать, сколько символов имеется в строке, соответствующей текстовому полю, можно при помощи свойства length класса String. Однако имеется и альтернативный вариант решения этой задачи, связанный с использованием свойства length класса TextField.


По особенностям своей работы эти свойства аналогичны, однако второе более производительно:

this.createTextField{"pole", 0, 200, 200, 100, 30);
pole.text = "\tПривет!", pole.border=true;
trace(pole.text.length); // Выводит: 8
trace(pole.length); // Выводит: 8

Обратите внимание, что отдельными знаками считаются и не визуализируемые символы — пробелы, знаки табуляции, переносы строки. Поэтому длина строки поля может быть ненулевой, даже если в нем ничего не отображается.

Поле паролей
Ушли в далекое прошлое те времена, когда Интернет был полностью открытой и лишенной какой-либо коммерческой составляющей средой, В настоящее время в сети имеется огромное количество платных ресурсов и ресурсов клубного типа. Чтобы получить к ним доступ, необходимо ввести в специальные поля идентификатор пользователя и, главное, выданный при регистрации пароль. В целях безопасности текст в поле пароля никогда не отображается — вместо символов пароля выводятся знаки «*».

Flash позиционируется компанией Macromedia, прежде всего, как инструмент разработки сайтов. Поэтому не удивительно, что для полей ввода имеется особый режим поля паролей.




Режим поля паролей может быть активизирован и программно. Для этого нужно присвоить значеие true особому свойству класса TextField password:

this.createTextField("pole", 0, 200, 200, 100, 30);
pole.type="input",pole.border=true;
pole.password=true; // Включаем режим поля паролей

Режим паролей по умолчанию делает поле однострочным. В принципе, его можно сделать и многострочным, переопределив свойство multiline. Однако на практике пароли из нескольких строчек не встречаются.

Ограничение на вводимые символы
Чаще всего поступающая из полей ввода информация должна иметь строго определенный формат.

Например, если в поле прописывается возраст, то соответствующая строка должна быть образована только цифрами. Если поле служит для задания имени, то во введенном в него тексте не должно быть знаков препинания, цифр и операторов. Если пользователь, желая побыстрее отделаться от заполнения некоторой формы или же ради эксперимента, введет в поле текст, абсолютно не связанный с запрашиваемым, то в алгоритме, в худшем случае, может произойти сбой или же, в лучшем случае, форма просто не выполнит свои функции по сбору информации. Наиболее типичный случай связан с введением вместо числового параметра строки из букв. При попытке использовать эту величину в вычислениях будет получено значение NaN, которое с высокой долей вероятности блокирует дальнейшее выполнение кода.

Очевидно, что в качественно изготовленном проекте должна быть предусмотрена вероятность введения в формы некорректных параметров. Конечно, можно проводить анализ поступающих строк, отклоняя их, если они содержат недопустимые символы. Однако такой подход требует довольно сложного программирования и добавления дополнительных элементов интерфейса, в которых будут появляться сообщения о сделанных пользователем ошибках. Используя ActionScript, данную проблему можно решить гораздо проще, задав для поля список допустимых символов. Не входящие в него знаки попросту не будут вводиться. Служит для этого специальное свойство класса TextField restrict.

В наиболее общем случае в качестве значения свойство restrict принимает строку, содержащую последовательность символов, допустимых для ввода. Например, создадим поле, в которое можно будет добавлять только цифры и символ %:

this.createTextField("pole", 0, 200, 200, 100, 30);
pole.type="input", pole.border=true;
pole.restrict="0123456789 %"; // Никакие другие символы вводиться
// не будут

Задавая допустимые символы, нужно помнить, что одна и та же буква, но в разном регистре, считается различным знаком. Также отдельным символом является и пробел.

Как правило, делать допустимыми для ввода приходится целые группы однотипных символов. Это могут быть буквы русского или латинского алфавита в одном или обоих регистрах, цифры от 0 до 9, служебные символы. Согласитесь, что прописать все буквы алфавита, не потеряв ни одной — это не так уж и просто. Поэтому свойство restrict может обрабатывать и условные обозначения последовательностей символов в виде «А-В», где А — первый знак в последовательности, В — замыкающий ее символ. Например, чтобы в поле можно было вводить цифры от 0 до 9 и русские буквы обоих регистров, нужно набрать:

pole.restrict="0-9a-aA-Я"; // Пробелами разделять последовательности
//не нужно

Важно понимать, что свойство restrict обрабатывает обозначения последовательностей отнюдь не логически. Все гораздо проще: определяются Unicode-коды открывающего и замыкающего символа и в задаваемую ими группу включаются все знаки, чьи коды имеют промежуточное значение.

Так как символы национальных алфавитов сохраняют в Unicode традиционную последовательность, то оказывается реальным сделать вводимыми все буквы, всего лишь задав первую и последнюю. Впрочем, возможны и более изощренные варианты. Например, зная, что в Unicode кирилличные символы обоих регистров располагаются одним блоком, причем вначале находятся большие буквы, а затем малые, сделать их все вводимыми можно следующей строчкой:

pole, restrict="A-я";

В одной строке, присваиваемой restrict, можно совмещать как обозначения последовательностей, так и одинарные символы:

pole.restrict="a-z012345"; // Вводиться будут буквы от а до z и цифры
// от 0 до 5

Иногда проще задавать не все допустимые для введения символы, а лишь группу неприемлемых.

Чтобы это сделать, нужно составить строку из недопустимых символов (можно использовать и обозначения последовательностей), начав ее символом « ∧ » Присвоив эту строку свойству restrict, вы сделаете соответствующие символы невводимыми. Например:

pole.restrict=""0-9 %"; // Вводимыми будут все символы, кроме цифр от 0 до 9

Можно одновременно сделать некоторые символы вводимыми, а некоторые — нет. Для этого в строке, присваиваемой свойству restrict, нужно вначале прописать символы, допустимые для ввода, затем поставить «А» и задать неприемлемые знаки. Такой сложный ход бывает необходим, например, если нужно сделать вводимым целый алфавит, за исключением нескольких букв:

pole.restrict="A-z^rR"; // Вводимыми будут латинские буквы обоих регистров,
// кроме буквы r

Приведенная директива работает, поскольку присваиваемая свойству restrict строка анализируется слева направо. Поэтому символы алфавита вначале делаются вводимыми, и лишь затем часть из них исключается из списка знаков, допустимых для ввода.

Символы в строке свойства restrict могут быть заданы и при помощи их Unicode-кодов. Это может быть полезно, если проект создается на языке, символов алфавита которого у вас на клавиатуре нет. Например:

pole.restrict="\u0030-\u0039"; // Вводимыми будут цифры от 0 до 9

При задании свойства restrict символы «^» и «-» считаются служебными. Чтобы они могли быть также включены в список вводимых знаков (или исключены из него), их необходимо экранировать символом обратного слеша «\». Для этого предварительно должен быть экранирован сам символ «\»:

pole.restrict="\\^\\-\\\\"; // Вводимыми будут символы "^", "-", "\"

По умолчанию свойство restrict равняется null. Это означает, что никаких ограничений на вводимые символы не существует.

При программном переопределении свойства text или переменной поля ограничения свойства restrict не действуют. Поэтому таким образом можно вывести в поле совершенно любой текст.

Настройки, которая была бы прямым аналогом свойства restrict, на Инспекторе Свойств поля ввода нет. Однако ограничить количество доступных для введения символов можно и не применяя ActionScript. Для этого нужно, используя панель Character Options, вызываемую нажатием кнопки, встроить в фильм контуры необходимых символов. При этом поле по умолчанию будет использовать только их, следовательно, никакой другой символ ввести будет нельзя.

Выделение текста поля
По умолчанию текст динамических полей является выделяемым. Это означает, что при наведении на текстовое поле указателя мыши его форма будет меняться со стрелки на I-курсор. Если щелкнуть по такому полю и, удерживая кнопку мыши нажатой, сместить указатель, участок текста окажется выделенным. Правый щелчок мыши по выделяемому полю вызовет контекстное меню с доступными командами Сору (Копировать) и Select All (Выделить все).

Если динамическое текстовое поле служит для отображения больших текстовых фрагментов, то возможность выделения текста просто необходима с точки зрения usability (удобства использования). Пользователь должен иметь возможность сохранить заинтересовавшую его информацию.

Сделать же это, просто записав НТМL-страницу на диск, в случае Flash-сайтов можно далеко не всегда. Однако если динамическое текстовое поле является частью элемента интерфейса (например, надписью на кнопке), то возможность выделения текста может оказаться вредной. Так, при наведении указателя на кнопку, сверху которой находится динамическое поле с ее названием, его вид сменится не на очертания руки, а на «I». При щелчке по такой кнопке событие onPress не произойдет. Вместо этого выделится текст надписи.

Чтобы текстовое поле не «перехватывало» события мыши, его нужно сделать невыделяемым. Для этого необходимо отпустить специальную кнопку. При этом наведение на поле указателя мыши перестанет сопровождаться сменой его вида, не будет появляться контекстное меню и исчезнет возможность выделить текст. Главное же, поле не будет перехватывать событие нажатия левой кнопки мыши.

Сделать динамическое поле невыделяемым можно и программно. Для этого нужно присвоить значение false специальному свойству selectable класса TextField. По умолчанию данное свойство всегда равно true — поле выделяемое. Пример:

this.createTextField("pole",0,100,100,10,10);
pole.text="Скопировать этот текст невозможно", pole.autoSize=true;
pole.selectable=false; // Делаем поле невыделяемым

Вручную сделать невыделяемым можно только динамическое поле и статичное поле. По отношению к полю ввода соответствующая настройка Инспектора Свойств не работает. Однако свойство selectable применимо и к полям типа Input (что можно использовать, чтобы временно их блокировать).

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Автоматическое удаление пробелов. Свойство condenseWhite
Встраивание в фильм целого шрифта
Динамическая замена выделенного текста. Метод replaceSel()
Динамическое задание выделения. Метод setSelection()
Задание и извлечение текста поля

Вернуться в раздел: Action Script / 13. Работа с текстом