metoda / Ml_ITIn_2013
.pdf
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.
В введенном имени присутствуют русские буквы, поэтому реакция будет следующей.
