Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

metoda / Ml_ITIn_2013

.pdf
Скачиваний:
29
Добавлен:
16.03.2016
Размер:
6.66 Mб
Скачать

101

точку (экранированную "\.") для указания того, что часть адреса после "@" может содержать точку как разделитель доменных имен.

Для проверки доменного имени первого уровня учитываем, что его длина уже составляет не только 2 символа (.ru) или 3 символа (.com), но и 4 символа - .info, и даже 6 символов. Поэтому в шаблоне присутствует выражение:

"\.[a-z]{2,6}$/i"

Проверка осуществляется по этому шаблону с применением функции preg_match():

- Функция bool preg_match( string $expr, string $str [,list &$pockets] )

сопоставляет выражение $expr в строке $str.

Задание 2. Использование функций пользователя для контроля полей формы

Ниже на рис. 3.44 показана форма ввода содержащая поле для ввода Email и в программе рис. 3.45 показано каким образом контролируется ввод информации в указанное поле.

Рис. 3.44. Форма ввода для листинга приведенного на рис. 3.45.

Листинг программы Lab6_0_1.php, содержащий функцию пользователя для проверки корректности адреса электронной почты.

102

Рис. 3.45. Листинг программы Lab6_0_1.php для формы на рис. 3.44.

103

104

105

Рис. 3.46. Продолжение листинга программы Lab6_0_1.php для формы на рис. 3.44.

В функции пользователя Val_email использованы стандартные функции:

-Функция int strlen( string $st ) определяет длину строки;

-Функция string trim( string $st [, string $charlist] ) удаляет ведущий и концевые символы строки.

Если пользователь (в форму на рис. 3.44) введет информацию как

показано на рис. 3.47, и нажмет кнопку , то реакция пользовательской функции Val_email показана на рис. 3.48.

Рис. 3.47. Форма с введенной информацией.

Обратите внимание, что после нажатия кнопки нижнее сообщение на рис. 3.47 исчезнет.

106

Рис. 3.48.Сообщение об ошибке сгенерированное пользовательской функцией.

Если пользователь исправит ошибку (рис. 3.49 ) и вновь нажмет , то ответ из программы Lab6_0_1.php показан на рис. 3.50.

Рис. 3.49. Исправление в поле Email введенное пользователем.

Рис. 3.50. Сообщение о правильности ввода контролируемое функцией val_email().

Ответьте на вопрос. Существует ли в реальности такой адрес Email, приведенный на рис, 3.49. ?

107

Задание 3. Проверка ограничений в текстовом поле. Lab6_0_2.php

Очень часто встречается ситуация, когда надо написать регистрацию на ресурсе, который вы поддерживаете. В силу каких-либо причин выдвигаются требования к введенной информации. Например, как проверить, что пользователь ввел в качестве ника (nickname, login) слово, состоящее только из букв латинского алфавита и цифр.

Проверку условия приведена внутри кода (рис. 3.51), чтобы было понятно, что и куда писать:

<?php

$user = $_POST['username']; if(!preg_match("/^[a-zA-Z0-9]+$/", $user)) {

echo "Имя пользователя задано в неправильном формате";

} else {

echo "Имя пользователя задано в правильном формате";

}

?>

Рис. 3.51. Проверка специфичного имени пользователя.

Разбирем само регулярное выражение.

Так как регистрационное имя пользователя должно состоять из латинских букв, а также цифр, то надо написать символьный класс, который будет удовлетворять этому условию: [a-zA-Z0-9].

В этот символьный класс входит три интервала, первый интервал a-z (все символы от маленькой буквы a до маленькой буквы z), второй интервал A-Z (аналогично, но с большими буквами), третий интервал 0-9 (цифры от 0 до 9). Мы описали только одну букву, из которой может состоять регистрационное имя, но таких букв может быть... а теперь как раз надо ответить на вопрос, сколько таких букв может быть?

Если Ваш ответ будет: ―Да сколько угодно‖, то вы неправы.

Регистрационное имя должно состоять минимум из одной буквы! и это обязательное условие при прохождении регистрации, поэтому надо данный факт описать. Вспоминаем про квантификаторы: [a-zA-Z0-9]+

Плюс '+', как раз тот квантификатор, который говорит, что в строковой переменной $user должен быть минимум один символ, который соответствует условию.

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

108

регулярное выражение символ начала строки '^' в начале регулярного выражения и символ конца строки '$' в конец: ^[a-zA-Z0-9]+$

Теперь надо объяснить функции preg_match, что строка ^[a-zA-Z0-9]+$ является регулярным выражением, надо поставить ограничители, для этого и ставлится слеш '/':

preg_match("/^[a-zA-Z0-9]+$/",$user)

Полный листинг сценария в котором использовано ограничение для вводимого имени приведено на рис. 3.52 (файл Lab6_0_2.php).

109

Рис. 3.52. Листинг программы Lab6_0_2.php (проверка имени пользователя).

Рис. 3.53. Конец листинга программы Lab6_0_2.php.

Ниже на рис. 3.54 приведена форма ввода для листинга программы из рис. 3.52 - 3.53.

110

Рис. 3.54. Заполненная форма. Программа Lab6_0_2.php.

Если будет нажата кнопка , то результат показан на рис. 3.55.

Рис. 3.55. Результат работы программы Lab6_0_2.php.

Если пользователь введет информацию, как показано на рис. 3.56, то результат приведен на рис. 3.57.

Рис. 3.56. Заполненная форма. Программа Lab6_0_2.php.

В введенном имени присутствуют русские буквы, поэтому реакция будет следующей.

Соседние файлы в папке metoda