metoda / Ml_ITIn_2013
.pdf
111
Рис. 3.57. Результат работы программы Lab6_0_2.php.
112
Задание 4. Специфика имени пользователя. Lab6_0_3.php
В 80% случаев вышеприведенная задача усложняется на практике, надо либо расширить набор символов, что делается простым добавлением символов в символьный класс, либо ужесточаются условия. Например, ставится условие, что имя пользователя может состоять как из букв латинского алфавита, так и из цифр, но первый символ имени пользователя должен быть обязательно буквой латинского алфавита!
Дописываем регулярное выражение: ^[a-zA-Z][a-zA-Z0-9]*$
Как известно, символьный класс описывает только один символ. Наша задача как раз в том и состоит, чтобы описать один символ (первый): [a-zA- Z] тут два интервала, описывают первый символ и дают понять, что никаких цифр в первом символе проверяемой строки быть не может.
В предыдущем примере явно следовало, что регистрационное имя пользователя должно быть длинной минимум в один символ. Мы уже описали первый символ строки, но он может быть и единственным, после него может быть сколько угодно символов, либо может их вообще не быть, но регулярное выражение совпадет только тогда, когда все последующие символы будут удовлетворять условию, что они являются либо буквами латинского алфавита, либо цифрами. [a-zA-Z0-9]. Первый обязательный символ описан, остальные символы не обязательны, поэтому меняем квантификатор с '+' на '*', Ставим символы начала и конца строки: ^[a-zA-
Z][a-zA-Z0-9]*$
Если в листинге программы 42-ю строку (рис. 3.53)
заменить на (файл Lab6_0_3.php):
то на ввод информации (рис. 3.58) получим следующую реакцию (рис. 3.59).
Рис. 3.58. Заполненная форма. Программа Lab6_0_3.php.
113
Рис. 3.59. Результат работы программы Lab6_0_3.php.
Задание 5. Специфика имени пользователя с помощью JavaScript. Lab6_0_4.php
Пример использования JavaScript (файл Lab6_0_4.php).
Ниже (рис. 3.60) представлен HTML код самой формы:
<form onsubmit="return checkmail(this.email.value)" action="#" method="post"> <input id="email" name="email" />
<input type="submit" value="Отправить" /> </form>
Рис. 3.60. Код для формы Lab6_0_4.php.
И код функции на JavaScript, которая и проверяет email.
<script language="javascript" type="text/javascript"> function checkmail(value) {
reg = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a- z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
if (!value.match(reg)) {alert("Пожалуйста, введите свой настоящий e-mail"); document.getElementById('email').value=""; return false; }
}
</script>
Рис. 3.61. Код функции на JavaScript для проверки email (Lab6_0_4.php).
В принципе, если не хотите вникать в суть дела, можете просто скопирвать код, всѐ будет работать). Напоминаем, что в Интернете
114
существует огромное количество открытых кодов для проверки Email адресов и их надо использовать , а не придумывать свои коды.
Рис. 3.62. Пример Lab6_0_4.php при неправильном указании Email адреса в форме ввода.
Проверка на корректность адреса электронной почты
<?php
function check_email($email) {
if (preg_match("%^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\- ]?[a-zA-Z0-9]+)*)\.([A-Za-z])+$%", $email)) {
return true;
}
return false;
}
?>
115
Задание 6. Проверка правильности ввода URL. Lab6_1.php.
Проверка правильности ввода URL является достаточно сложной задачей. Построить универсальное регулярное выражение, которое соответствовало всем URL, очень не просто.
При построении регулярного выражения будем исходить из того, что URL имеет следующий формат:
http://хост/путь
Простейшим вариантом проверки, не позволяющим посетителю ошибаться при наборе URL, но в то же время не предотвращающий неверный формат, является:
"#http://[^]*\.html?#i"
Данное выражение учитывает только URL расширения файла html либо htm, для обобщения на другие файлы следует расширить регулярное выражение до:
"#http://[^]*\.(html?|php|pl|cgi)#i"
Уточняя регулярное выражение, разместим за префиксом http:// регулярное выражение для хоста — [-a-z0-9_.]+. Структура пути может быть более разнообразной. Для него необходимо использовать выражение вида:
[-a-z0-9_:@&?=+,.!/~*'%$]*
Объединяя все в одно регулярное выражение, получаем следующее:
"#http://[-a-z0-9_.]+[-a-z0-9_:@&?=+,.!/~*'%$]*\.(html?|php|pl|cgi)#i"
На рис. 3.63 приведена форма с полем URL адреса.
Рис. 3.63. Пример Lab6_1.php при неправильном указании URL адреса в форме ввода.
Как видно из рис. 3.63, при таком вводе обработчик зафиксирует ошибку, которая может быть представлена рис. 3.64.
116
Рис. 3.64. Реакция Lab6_1.php при неправильном указании URL адреса в форме ввода на рис. 3.63.
Исходный листинг Lab6_1.php приведен ниже на рис. 3.65.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Lab6_1 Регулярные выражения</title>
</head>
<h2> Регулярные выражения для URL </h2>
<h3 align="left"><font color=RED>(файл Lab6_1.php)<font color=BLUE> </h3>
<body
TEXT=BLUE
LINK=RED
VLINK=BLUE ALINK=PINK>
<?PHP
if (!isset($_POST[Submit]))
{
//echo "Кнопку Submit=OK еще не нажимали <br>"; print("<form action=\"Lab6_1.php\" method=POST>"); print("<table> <tr><td> Ваше Имя </td>");
print("<td><input type=text name=\"FirstName\" size=20></td></tr>"); print("<tr><td>Ваша Фамилия</td>");
print("<td><input type=text name=\"LastName\" size=20></td></tr>"); print("<tr><td>URL</td>");
print("<td><input type=text name=\"Url\" size=40></td></tr></table>"); print("<input type=submit name=\"Submit\" value=\"OK\"> "); print("<input type=reset name=\"Reset\" value=\"Cancel\">"); print("</form>");
}
else
{
$Url_adress=$_POST['Url'];
//echo "Указан адрес $Url_adress ";
117
if (strlen($Url_adress)<8)
{echo "Указанный адрес $Url_adress менее 8-и символов";// exit;//завершение выполнения PHP сценария
}
//Единственным обязательным признаком в URL:
//url это обязательно две группы символов, разделенных точкой. //Больше ничего обязательного для URL нет.
//Например, google.com или supersait.ru if(preg_match('#^[-a-z0-9]+(\.[-a-z0-9]+)*(\.[a-z]+)(|\/|\/([a-z0-9- _\(\)!\&\#\.\/\~]+(\.[a-z0-9\_\-]+)?(\?([a-zа-я0-9-_\%]*|([a-z0-9_-]+=[a-zа-я0-9- _\%\&]*)+))?(\#[a-z0-9]*)?)?)$#i', $Url_adress))
{
// URL верен. Например, ORD.com.ru
//Внимание! Это выражение не проверяет на наличие "http://"
}
else
{
// URL НЕ верен
echo "Возможный Url Ord.com.ru или www.ord.com.ru <br>"; exit("Указанный адрес $Url_adress <font color=\"red\">НЕ верен</font><br>");
}
if(!preg_match("#http://[-a-z0-9_.]+[-a-z0- 9_:@&?=+,.!/~*'%$]*\.(html?|php|pl|cgi|ru)#i", $Url_adress))
{
echo "Указанный адрес $Url_adress допустим <br>";
$Pattern="^(http://)?([^[:space:]]+)([[:alnum:]\.,?%#\-\:;&])$"; if (ereg($Pattern,$Url_adress)):
//ereg - совпадение с регулярным выражением. //Ищет в строке Url_adress совпадения с регулярным //выражением, данным в шаблоне pattern.
//
$Replace="<a href=\"http://\\2\\3\" target=\"_self\">\\2\\3</a>"; $Url_adress=eregi_replace($Pattern, $Replace, $Url_adress);
//Функция eregi_replace ищет регулярное выражение Pattern //в строке Url_adress и заменяет его строкой Replace. //функция не чувстительна к регистру
print("Ваша подача документа по URL адресу - $Url_adress - может быть осуществлена!");
//Например. Ваша подача документа по URL адресу - // www.ord.com.ru - может быть осуществлена!
118
else:
print("URL не точен"); endif;
}
//exit("Неверный формат URL");
}
?>
</body>
</html>
Рис. 3.65. Листинг Lab6_1.php с проверкой URL.
Если пользователь введет правильную информацию рис. 3.66, то вывод в браузере показан на рис. 3.67.
Рис. 3.66. Форма Lab6_1.php с проверкой URL.
Рис. 3.67. Форма Lab6_1.php с проверкой URL.
119
Задание 7. Проверка правильности ввода из списка. Lab6_2.php.
Пусть необходимо разработать форму (рис. 3.68)
Рис. 3.68. Форма Lab6_2.php.
Для указания способа связи использован следующий список (рис. 3.69)
Рис. 3.69. Форма Lab6_2.php списком значений.
Форма выводится с помощью листинга представленного на рис. 3.70 (файл Lab6_2.php), а обработка события производится в файле Lab6_3.php (листинг программы показан на рис. 3.71).
Файле Lab6_3.php в свою очередь содержит внутренний обработчик событий представленный в файле Lab6_4.php (рис. 3.72).
Листинг программы Lab6_2.php представлен ниже.
120
Рис. 3.70. Листинг Lab6_2.php с списком значений.
Как указано в строке
обработчик нажатия кнопки ―OK‖, находится в отдельном файле с именем Lab6_3.php.
В качестве способа связи по умолчанию предлагается использовать ―Телефон‖.
Естественно пользователь может указать один из видов связей, что должно быть учтено в обработчике Lab6_3.php (рис. 3.71).
