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

17 сентября, 2007

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

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

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

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" lang="ru">
  4. <head>
  5. <title>Проверка регулярных выражений</title>
  6. <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  7. <link rel="stylesheet" type="text/css" href="styles.css" />
  8. <script src="prototype.js" type="text/javascript"></script>
  9. <script src="scripts.js" type="text/javascript"></script>
  10. </head>
  11. <body>
  12. <p class="title">Тестирование регулярных выражений</p>
  13. <form id="expForm" action="#" method="post">
  14. <p>
  15. <label for="regexp">Регулярное выражение</label>
  16. <input type="text" name="regexp" id="regexp" class="txt"
  17.     value="/(d{1,3})-?([d-]+)/" />
  18. </p>
  19. <p>
  20. <label for="searchText">Текст</label>
  21. <textarea name="searchText" id="searchText" rows="10" class="txt">
  22. 525-11-65 346-1-346</textarea>
  23. </p>
  24. <p>
  25. <label for="case">Учитывать регистр</label>
  26. <input type="checkbox" name="case" id="case" checked="checked" />
  27. </p>
  28. <p>
  29. <input type="button" name="search" id="search" value="Поиск"
  30.     onClick="analyseText()" class="btn" />
  31. </p>
  32. <p class="comment">Примечание: необходимо ввести Perl-совместимое
  33. регулярное выражение (например, "/[abc]+$/") и текст, в котором
  34. нужно выполнить поиск по этому выражению. Подробнее почитать о
  35. правилах составлении регулярных выражений можно
  36. <a href="http://www.php.net/manual/ru/ref.pcre.php">здесь</a>.</p>
  37. </form>
  38. <div id="results">
  39. Для анализа текста с помощью регулярного выражения нажмите кнопку "Поиск"
  40. </div>
  41. <div id="footer">
  42. <p><a href="http://www.simplecoding.org">Почитать описание</a></p>
  43. <p><a href="http://www.simplecoding.org">Автор: Стаценко Владимир</a></p>
  44. </div>
  45. </body>
  46. </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:

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

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

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

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

  1. body {
  2.     background-color: #EDEDED;
  3.     margin: 0;
  4.     padding: 2em 2em 2em 2em;
  5. }
  6.  
  7. p.title {
  8.     color: #734600;
  9.     text-align: center;
  10.     font-family: Tahoma, sans-serif;
  11.     font-size: 140%;
  12. }
  13.  
  14. #expForm {
  15.     color: #126000;
  16.     font-family: Verdana, sans-serif;
  17.     font-size: 90%;
  18.     font-weight: bold;
  19.     border: solid 1px #000;
  20.     margin: 0;
  21.     padding: 1em 1em 1em 1em;
  22.     background-color: #FCFCDB;
  23. }
  24.  
  25. #expForm .txt {
  26.     width: 400px;
  27. }
  28.  
  29. #expForm p {
  30.     clear: both;
  31. }
  32.  
  33. #expForm p.comment {
  34.     font-size: 80%;
  35.     font-weight: normal;
  36.     padding: 0 1em 0 1em;
  37.     color: grey;
  38.     font-family: Verdana, sans-serif;
  39. }
  40.  
  41. #expForm p label {
  42.     float: left;
  43.     width: 25%;
  44. }
  45.  
  46. #expForm .btn {
  47.     margin: 0 0 0 25%;
  48.     border: solid 1px #126000;
  49.     font-size: 120%;
  50.     font-family: Tahoma, sans-serif;
  51.     color: #126000;
  52. }
  53.  
  54. #results {
  55.     margin: 2em 0 0 0;
  56.     padding: 1em 1em 1em 1em;
  57.     border: solid 1px #000;
  58.     background-color: #DFFFD8;
  59.     font-size: 90%;
  60.     font-family: Tahoma, sans-serif;
  61.     color: #472A01;
  62. }
  63.  
  64. .bold {
  65.     font-weight: bold;
  66. }
  67.  
  68. #footer {
  69.     border: solid 1px #000;
  70.     background-color: #F7E7EB;
  71.     font-size: 100%;
  72.     font-family: Verdana, sans-serif;
  73.     margin: 2em 0 0 0;
  74.     padding: 0.5em 0.5em 0.5em 0.5em;
  75. }
  76.  
  77. #footer p {
  78.     text-align: center;
  79.     font-size: 90%;
  80.     margin: 0;
  81.     padding: 0;
  82. }
  83.  
  84. #footer p a {
  85.     text-decoration: none;
  86. }
  87.  
  88. #footer p a:hover {
  89.     color: #ff0000;
  90. }

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

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

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

Постовой

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

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

]]>

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

]]>

Опубликовано в Ajax, PHP

]]>

Комментариев нет

Вы можете отслеживать обсуждение записи с помощью RSS 2.0 rss link

Вы также можете оставить комментарий, или трекбек с Вашего сайта.

Оставить комментарий

Введите ваш комментарий

* - обязательные для заполнения поля

Quicktags:

]]>