PHP скрипт. Тестирование регулярных выражений (клиентская часть)

17 сентября, 2007

В прошлый раз (Тестирование регулярных выражений) мы начали писать web приложение для проверки регулярных выражений. Мы разобрались с его назначением, функциями и структурой. Теперь посмотрим, что собой представляют его отдельные компоненты.

Сначала рассмотрим клиентскую часть. Для нашего приложения нужна одна html страница с формой для ввода данных (назовем ее index.html) и файл с JavaScript функцией (scripts.js), которая будет отправлять запрос и обновлять страницу. Кроме того, что бы немного улучшить дизайн мы добавим таблицу стилей (styles.css). Такой подход позволяет убрать все правила оформления в отдельный файл и не загромождать ими html страницу.

Теперь посмотрим разметку в файле index.html.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru">
<head>
<title>Проверка регулярных выражений</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="styles.css" />
<script src="prototype.js" type="text/javascript"></script>
<script src="scripts.js" type="text/javascript"></script>
</head>
<body>
<p class="title">Тестирование регулярных выражений</p>
<form id="expForm" action="#" method="post">
<p>
<label for="regexp">Регулярное выражение</label>
<input type="text" name="regexp" id="regexp" class="txt"
	value="/(d{1,3})-?([d-]+)/" />
</p>
<p>
<label for="searchText">Текст</label>
<textarea name="searchText" id="searchText" rows="10" class="txt">
525-11-65 346-1-346</textarea>
</p>
<p>
<label for="case">Учитывать регистр</label>
<input type="checkbox" name="case" id="case" checked="checked" />
</p>
<p>
<input type="button" name="search" id="search" value="Поиск"
	onClick="analyseText()" class="btn" />
</p>
<p class="comment">Примечание: необходимо ввести Perl-совместимое
регулярное выражение (например, "/[abc]+$/") и текст, в котором
нужно выполнить поиск по этому выражению. Подробнее почитать о
правилах составлении регулярных выражений можно
<a href="http://www.php.net/manual/ru/ref.pcre.php">здесь</a>.</p>
</form>
<div id="results">
Для анализа текста с помощью регулярного выражения нажмите кнопку "Поиск"
</div>
<div id="footer">
<p><a href="http://www.simplecoding.org">Почитать описание</a></p>
<p><a href="http://www.simplecoding.org">Автор: Стаценко Владимир</a></p>
</div>
</body>
</html>

Как видите, все довольно просто. В первую очередь мы указываем тип документа, его кодировку, заголовок страницы и т.п. В строке 7 мы подключаем таблицу стилей, а в строках 8 и 9 – библиотеку для работы с JavaScript и нашу функцию, которая выполняет Ajax запрос. В нашем приложении мы используем одну из самых лучших JS библиотек – prototype. Использование библиотеки немного увеличивает время первоначальной загрузки страницы (т.к. будет загружаться файл prototype.js), но позволяет значительно упростить работу с Ajax (и не только с ним). Описание этой библиотеки естественно выходит далеко за рамки этой статьи, поэтому я остановлюсь только на тех компонентах, которые мы будем использовать. Подробнее узнать о prototype можно на сайте www.prototypejs.org или из многочисленных статей.

Вернемся к нашей странице. Она условно разделена на 4 части: заголовок (между тегами <p class="title"> и </p>), форма для ввода данных (<form id="expForm"…> и </form>), результаты поиска (<div id="results">) и хвостовик со ссылками (<div id="footer">).

Обратите внимание, что все поля формы содержат значения по умолчанию, отсутствует поле "submit", а параметр action="#". Т.е. сама форма данные никуда не отправляет. Отправку запроса выполняет функция analyseText() при нажатии на кнопку "Поиск" (событие onClick, строка 30).
Сама функция находится в файле scripts.js:

function analyseText() {
    //читаем значения введенные в поля
    var e = $('regexp').value;
    var t = $('searchText').value;
    var c = $('case').checked;
    //формируем строку с параметрами запроса
    var pars = $H({exp:e, text:t, textcase:c}).toQueryString();
    //отправляем ajax запрос
    new Ajax.Updater("results", "analyser.php", {method:"post", parameters:pars});
}

Теперь разберем работу функции. Использование prototype позволило сократить код до минимума. Сначала мы читаем данные, введенные в поля формы, формируем хеш-таблицу и преобразуем ее в строку с параметрами запроса (строки 3-7). Затем мы создаем объект Ajax.Updater который отправляет запрос серверу, читает результат и вставляет его между тегами <div id="results">…</div>

Первый параметр, который указывается при создании объекта это id блока в который будет вставлен результат запроса. В следующем параметре мы указываем тип запроса ("post"), а в последнем – строку с параметрами.

На таблице стилей я подробно останавливаться не буду. Дизайн нашего приложения очень простой. С помощью цвета и рамок выделены 3 основные раздела сайта (форма, блок с результатами и «хвостовик»).

body {
    background-color: #EDEDED;
    margin: 0;
    padding: 2em 2em 2em 2em;
}

p.title {
    color: #734600;
    text-align: center;
    font-family: Tahoma, sans-serif;
    font-size: 140%;
}

#expForm {
    color: #126000;
    font-family: Verdana, sans-serif;
    font-size: 90%;
    font-weight: bold;
    border: solid 1px #000;
    margin: 0;
    padding: 1em 1em 1em 1em;
    background-color: #FCFCDB;
}

#expForm .txt {
    width: 400px;
}

#expForm p {
    clear: both;
}

#expForm p.comment {
    font-size: 80%;
    font-weight: normal;
    padding: 0 1em 0 1em;
    color: grey;
    font-family: Verdana, sans-serif;
}

#expForm p label {
    float: left;
    width: 25%;
}

#expForm .btn {
    margin: 0 0 0 25%;
    border: solid 1px #126000;
    font-size: 120%;
    font-family: Tahoma, sans-serif;
    color: #126000;
}

#results {
    margin: 2em 0 0 0;
    padding: 1em 1em 1em 1em;
    border: solid 1px #000;
    background-color: #DFFFD8;
    font-size: 90%;
    font-family: Tahoma, sans-serif;
    color: #472A01;
}

.bold {
    font-weight: bold;
}

#footer {
    border: solid 1px #000;
    background-color: #F7E7EB;
    font-size: 100%;
    font-family: Verdana, sans-serif;
    margin: 2em 0 0 0;
    padding: 0.5em 0.5em 0.5em 0.5em;
}

#footer p {
    text-align: center;
    font-size: 90%;
    margin: 0;
    padding: 0;
}

#footer p a {
    text-decoration: none;
}

#footer p a:hover {
    color: #ff0000;
}

Единственный момент, на который стоит обратить внимание – это расстановка элементов формы. Для того, чтобы расположить элементы формы в две колонки с фиксированной шириной мы для каждого элемента label устанавливаем директиву float: left (стр 42), которая "вырывает" элемент из потока документа и смещает его влево. При этом следующий элемент будет обтекать label справа. Директива clear: both, установленная для каждого тега <p> (стр 30), восстанавливает нормальный поток элементов в документе. Таким образом, каждый следующий параграф будет расположен под предыдущим.

Все. Клиентская часть нашего приложения закончена.
В следующий раз мы напишем серверную часть нашего приложения.

Посмотреть работающее приложение можно здесь.

Постовой

Продажа недвижимости в Москве

Понравилась статья? Подписывайтесь на продолжение rss link !

Или на мой твиттер twitter link

]]>

Добавьте эту страницу в google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

]]>

Опубликовано в Ajax, PHP Комментарии (4) »

]]>

Вы можете оставить комментарий. Трекбеки закрыты.

  • http://auto-mnenie.ru/ Рустам

    Спасибо за статьи! Все, что вы пишете очень полезно. У меня просьба, не могли бы вы написать еще статью об Ajax, как написать аплоадер файлов с progress-bar'ом?

    • http://www.simplecoding.org/ Владимир

      О загрузке файлов ajax'ом пост уже был.
      А вот progress-bar – отдельная тема, если, конечно вы хотите чтобы он показывал процент загрузки, а не просто какую-нибудь анимацию.
      Проблема в том, что PHP не позволяет определить сколько процентов файла загружено. Существует несколько готовых решений, использующих flash, perl или специальные модули к PHP. ИМХО, удобнее всего – flash. Есть несколько очень неплохих загрузчиков, в т.ч. и бесплатных.

  • http://auto-mnenie.ru Рустам

    Спасибо за статьи! Все, что вы пишете очень полезно. У меня просьба, не могли бы вы написать еще статью об Ajax, как написать аплоадер файлов с progress-bar'ом?

    • http://www.simplecoding.org/ Владимир

      О загрузке файлов ajax'ом пост уже был.
      А вот progress-bar – отдельная тема, если, конечно вы хотите чтобы он показывал процент загрузки, а не просто какую-нибудь анимацию.
      Проблема в том, что PHP не позволяет определить сколько процентов файла загружено. Существует несколько готовых решений, использующих flash, perl или специальные модули к PHP. ИМХО, удобнее всего – flash. Есть несколько очень неплохих загрузчиков, в т.ч. и бесплатных.

]]>
Tweet