Опубликован: 04.11.2006 | Доступ: свободный | Студентов: 4621 / 581 | Оценка: 4.46 / 3.96 | Длительность: 39:17:00
Урок 13:

Проверка и форматирование данных

Проверка последовательностей

Под последовательностью мы подразумеваем строку символов (букв, цифр и специальных символов), форматированных некоторым образом – то есть расположенных в определенном порядке. Вот некоторые примеры последовательностей:

  • Телефонные номера (ххх-хх-хх)
  • Номера кредитных карт (хххх хххх хххх хххх)
  • Даты (хх.хх.хх или хх/хх/хх)
  • Адреса URL (http://www.xxxxxx.xxx)

Символы внутри подобной последовательности могут меняться, однако общее их расположение и количество должно соответствовать некоторым правилам формата. Проверять последовательности, как правило, сложнее, чем другие виды данных, поскольку здесь должны соответствовать довольно большому числу условий. Давайте рассмотрим процесс по пунктам на примере проверки адресов электронной почты. Условия проверки e-mail адреса таковы:

  1. Он должен содержать хотя бы один символ @.
  2. Он должен содержать хотя бы одну точку (отделяющую имя домена от расширения домена, как mydomain.com или mydomain.net).
  3. Последняя точка должна располагаться где-либо после символа @, но при этом она не может являться ни последним, ни предпоследним символом.
  4. Символ @ не может быть ни первым, ни вторым.
  5. Между символом @ и первой после него точкой должно быть по меньшей мере два символа.
  6. Адрес e-mail должен состоять по меньшей мере из восьми символов (aa@bb.cc).

Совет Шести перечисленных условий вполне достаточно для проверки адресов e-mail. Конечно, можно добавить и другие условия (например, чтобы символы после точки обязательно были com, net, org и т.п.), однако в этом случае процедура проверки может стать чересчур длинной, и к тому же будет нуждаться в исправлении в случае изменения стандартов Интернета. Тут важно определить основные, наиболее важные условия и проверять только их.

В данном упражнении мы, для проверки текста, введенного в поле email нашей регистрационной формы, используем всего три из перечисленных условий:

  1. Где-либо после второго символа должен встретиться символ @.
  2. По меньшей мере через два символа от @ должна встретиться точка.
  3. Адрес должен состоять не менее чем из восьми символов.

Совет Не забудьте дать пользователю инструкции по поводу того, в каком формате он должен ввести данные. Обычно пример правильного формата помещают непосредственно под текстовым полем, в которое пользователь должен ввести информацию.


  1. Откройте файл validate3.fla из папки Lesson13/Assets.

Мы продолжаем работу с проектом, начатым в предыдущих упражнениях.

  1. Откройте панель Действия, выделите кадр 1 слоя Actions и добавьте в конец имеющегося скрипта следующее описание функции:
function validateEmail() {
  if (email.text.indexOf("@") < 2) {
    errors.push("@ missing in email or in the wrong place.");
  }
  if (email.text.lastIndexOf(".") <= (email.text.indexOf("@") + 2)) {
    errors.push(". missing in email or in the wrong place.");
  }
  if (email.text.length < 8) {
    errors.push("Email address not long enough.");
  }
}

Функция validateEmail() будет проверять текст, введенный в поле email. В ее составе – три условных оператора; каждый из них проверяет одно из условий, перечисленных в начале упражнения. Заметьте, это три самостоятельных оператора if (а не конструкция типа if/else, if/else if ), поэтому все они будут выполнены. Рассмотрим каждый из них подробнее. Первый условный оператор:

if (email.text.indexOf("@") < 2) {
  errors.push("@ missing in email or in the wrong place.");
}

Вы, наверное, помните, что метод indexOf() объекта String возвращает индекс (порядковый номер в строке) первого встреченного символа, совпадающего с указанным в скобках. С помощью этого метода условный оператор определяет, не стоит ли на первом или втором месте в поле email символ @. Индексы символов в строке начинаются с 0, поэтому логическое выражение даст результат true, если первый попавшийся символ @ имеет индекс 0 или 1. В этом случае в массив errors будет добавлено сообщение об ошибке. Если символ @ в поле email вообще не встретится, метод indexOf() вернет значение –1; это тоже меньше 2, значит, результат логического выражения и в этом случае будет true, и сообщение об ошибке будет добавлено в массив.

Совет С помощью метода indexOf() можно находить в строке не только отдельные символы, но и сочетания символов (подстроку). Например, чтобы проверить, встречается ли в строке сочетание символов "http://", следует использовать выражение string.indexOf("http://"). Возвращенным результатом будет индекс в строке первого символа подстроки.

Рассмотрим второй условный оператор функции.

if (email.text.lastIndexOf(".") <= (email.text.indexOf("@") + 2)) {
  errors.push(". missing in email or in the wrong place.");
}

Здесь использован метод lastIndexOf() объекта String – он похож на метод indexOf(), только возвращает индекс последнего встречающегося в строке символа (или подстроки). Например, если email.text = "derek.franklin@derekfranklin.com", то email.text.lastIndexOf(".") вернет значение 27. таким образом, этот условный оператор определяет положение в строке последней точки относительно символа @. Если между символом @ и последней точкой меньше двух символов, логическое выражение дает результат true, и в массив errors добавляется сообщение об ошибке.

Третий условный оператор совсем простой. Вот как он выглядит:

if (email.text.length < 8) {
  errors.push("Email address not long enough.");
}

Как уже было сказано, наименьший возможный адрес e-mail выглядит как aa@bb.cc – восемь символов, включая @ и точку. Таким образом, если значение свойства length строки, введенной в поле email, меньше восьми, в массив errors помещается сообщение о том, что адрес слишком короткий.

В процессе выполнения функции может оказаться, что текст в поле email не соответствует всем трем условиям. Что ж, в этом случае в массив errors будет помещено три различных сообщения об ошибках.

  1. В функцию validateForm(), после вызова функции validateName(), вставьте еще один вызов функции:
validateEmail();

Это – вызов только что описанной нами функции. Теперь функция validateForm() получила возможность проверять и текст в поле email. Этот вызов функции должен стоять перед оператором, проверяющим длину массива errors, ведь она тоже может добавить в массив сообщения об ошибках. В итоге, если функция validateName() и/или функция validateEmail() обнаружит ошибки, соответствующие сообщения будут отображены в поле errorLog.

Примечание К кнопке Submit в этой сцене мы ранее присоединили вызов функции validateForm(). Только что мы расширили возможности этой функции, и при нажатии кнопки Submit новые действия тоже будут выполнены.


  1. Командой Управление > Проверить фильм (Control > Test Movie) запустите тестирование проекта.

Введите заведомо неправильный адрес в поле email, и, если хотите, в поле name. Посмотрите, чем закончится процесс проверки. Кнопкой Clear можно вернуть визуальные элементы фильма и внутренние данные к изначальным значениям.

  1. Закрыв тестовый фильм, вернитесь в среду разработки и сохраните этот файл под именем validate4.fla.

Мы продолжим работу с этим файлом в следующем упражнении.

Салтанат Бектегенова
Салтанат Бектегенова

Дострочное пересдача экзамена

 

Евгений Стародубцев
Евгений Стародубцев

Вот задание:

7. Открыв панель Действия (Actions) и установив ее в Экспертный режим(Expert Mode), выделите кадр 1 слоя Actions и введите следующий скрипт: