Поиск

Сопоставление с шаблонами

В РНР есть две встроенные функции, предназначенные специально для сопо ставления с шаблоном в строке: егед ( ) и eregi ( ) . Разница между ними состо ит в том, что функция егед ( ) реагирует на регистр, a eregi () нет, то есть не различает строчные и прописные буквы.'Как правило, широко используется именно функция eregi ( ) , если нет особой необходимости в более точном со впадении (например, в целях безопасности, как с паролями). Значение обеих функций будет истинным, если произошло совпадение с шаблоном, и ложным в противном случае. Ниже представлены два способа использования этих функций:

ereg("pattern", "string");
или
$Pattern = "pattern";
$String = "string";
eregi($Pattern, $String);

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

Создадим новый сценарий HandleForm.php, который работает в связке с файлом form.html. Сценарием HandleForm.php будет проверять ся правильность переданного адреса электронной почты (листинг 8.1). Листинг 8.1 т Исходная форма form.html была создана для ввода адреса элек тронной почты, комментариев пользователя, а также его имени и фамилии.

1 <HTML>
2 <HEAD>
3 <TITLE>HTML Form</TITLE>
4 </HEAD>
5 <BODY>
6 <FORM ACTION="HandleForm.php" METHOD=POST>
7 First Name <INPUT TYPE=TEXT NAME="Array[FirstName]" SIZE=20xBR>
8 Last Name <INPUT TYPE=TEXT NAME= "Array [LastName] " SIZE=40xBR>
9 Email Address <INPUT TYPE=TEXT NAME="Array[Email]" SIZE=60xBR>
10 Comments <TEXTAREA NAME="Array[Comments]" ROWS=5 COLS=40>
</TEXTAREAxBR>
11 <INPUT TYPE=SUBMIT NAME="SUBMIT" VALUE="Submit!">
12 </FORM>
13 </BODY>
14 </HTML>

Проверка соответствия шаблону с помощью функции eregi

  1. Создайте новый сценарий HandleForm.php в текстовом редакторе.
  2. Начните со стандартного заголовка HTML и РНР.
  3. <HTML>
    <HEAD> '
    <TITLE>Using Regular Expressions</TITLEx/HEAD>
    <BODY>
    <?php
    /* Эта страница получает и обрабатывает данные, принятые
    от "form.html". */
  4. Задайте необходимые условия.
  5. if (($Array["FirstName"]) AND ($Array["LastName"])) {
    $Array["Name"] = $Array["FirstName"] . " ".
    $Array["LastName"];
    } else { •
    print ("Please.enter your first and last names.<BR>\n");

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

  6. Следующий шаг создание шаблона для адреса электронной почты.
  7. SPattern = " . + @ . + \ . . + " ;

    Это шаблон для проверки правильности адреса электронной почты. Он до вольно прост, но отлично справится с задачей (впрочем, для сравнения далее будет разработан более сложный шаблон).

    Первая часть шаблона означает, что адрес электронной почты должен на чинаться по крайней мере с одного произвольного знака (.+)до знака коммер ческое «а» (@). Из второй части шаблона следует, что далее следует символ @, обязательный во всех адресах электронной почты. Третья часть означает, что необходим по крайней мере еще один знак. Четвертая часть требует наличия точки, а последняя использования еще по крайней мере одного знака, завер шающего строку (это не должна быть точка).

  8. Используйте шаблон для проверки переданного адреса электронной почты.
  9. if (eregi($Pattern, $Array["Email"])) {
    print ("Your information has been received!<BR>\n");
    } else {
    print ("Please enter a valid email address!\n");

    Для применения функции eregi ( ) необходимо передать в нее шаблон, за данный выше, и переменную $Аггау [" Emai 1" ] из файла form.html. Если значе ние переменной соответствует шаблону, условие признается истинным и будет напечатано соответствующее сообщение. В противном случае пользователь по лучит запрос на ввод Правильного адреса электронной почты. Так как адреса электронной почты никак не реагируют на регистр, мы используем функцию eregi ( ) , а не ereg ( ) .

  10. Сохраните сценарий (листинг 8.2), загрузите его на сервер и протестируй те в браузере (рис.).
  11. Листинг 8.2 * Этот сценарий не только проверяет, ввел ли пользователь ад рес электронной почты в HTMLформу, но и подтверждает его правильность.

    1 <HTML>
    2 <HEAD>
    3 <TITLE>Using Regular Expressions</TITLEx/HEAD>
    4 <B0DY>
    5 <?php
    6 /* Эта страница получает и обрабатывает данные, принятые
    от "form.html". */ *
    7 if <($Array["FirstName"]) AND ($Array["LastName"])) {
    8 $Array["Name"] = $Array["FirstName"] . " "
    $Array["LastName"];
    9 } else {
    10 print ("Please enter your first and last names.<BR>\n");
    11 }
    12 $Pattern = *.+».+\..+"j
    13 if (eregi($Pattern, $Array["Email"])) {
    14 print ("Your information has been received!<BR>\n");
    15 } else {
    16 print ("Please enter a valid email address!\n");
    17 }
    18 ?>
    19 </BODY>
    20 </HTML>
    Хотя написание и использование своих регулярных выражений и доказывает вашу преданность делу программирования, разработано много работающих конструк ций (включая шаблон для проверки адресов электронной почты), которые можно загрузить с сайтов, посвященных языку РНР и перечисленных в приложении С.
    Я присвоил шаблон переменной и затем обратился к переменной в функции eregi (). Можно, однако, поместить шаблон прямо в функцию: if (eregi ( " , + @ . + \ . . + " , $Array[ "Email"])) {...
    Проверка формы, идентичная только что запрограммированной нами, может осу ществляться на машинеклиенте с помощью языка JavaScript и встроенных в него регулярных выражений. В зависимости от обстоятельств можно использовать ре гулярные выражения в одном или другом языке, а можно и в обоих.