Служат для поиска фраз, слов, символов в тексте. Эти созданные шаблоны ищут подстроку в тексте. Регулярные выражения позволяют одной строкой выполнить например, такие задачи: узнать, имеются ли в строке цифры; найти и заменить или удалить несколько вопросительных знаков, идущих подряд; найти в тексте почтовые адреса, телефонные номера.
Незнание и недопонимание о функциональности Регулярных выражений сильно затруднит работу в веб-программировании. Основная трудность заключается в синтаксисе таких функций со множеством специальных символов. Их трудно запомнить.
Задача:
1. Создать текстовое поле и ввести дату в формате ММ.ДД.ГГГГ, создать регулярное выражение для проверки этой даты на корректность.
2. Вывести соответствующее сообщение.
Решение:
<?php
$reg = '{^\s*( (\d\d) \s* [[:punct:]] \s*(\d\d)\s* [[:punct:]] \s*(\d\d\d\d))\s*$}xs';
$dat = $_POST['dat'];
$match = preg_match ($reg, "$dat", $pockets);
$m = $pockets[2];
$d = $pockets[3];
$y = $pockets[4];
$check = (checkdate ($m, $d, $y));
if (empty ($_POST['dat']))
echo 'Введите дату в формате ММ.ДД.ГГГГ в форму.';
elseif ($match == 0)
echo 'Введите корректную дату.';
elseif ($check == 0)
echo 'Введите правильную дату.';
else
echo "Введена корректная дата: $m.$d.$y";
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Регулярное выражение</title>
</head>
<body>
<form method="post">
<p>
Ввести дату в формате ММ.ДД.ГГГГ:
</p>
<input type="text" name="dat">
<input type="submit">
</form>
</body>
</html>
Реализация задачки в браузере: посмотреть в новом окне
Задание:
Создать текстовое поле с e-mail и создать регулярное выражение, чтобы проверять e-mail на корректность. Результат проверки вывести в виде сообщения на страницу.
Решение:
<?php
$reg = "/^\w+([-_\.])*\w+?@\w+([-_.])*\w+\.\w{2,4}$/";
$dat = $_POST['dat'];
$match = preg_match ($reg, "$dat");
if (empty ($_POST['dat']))
{
echo 'Введите e-mail в форму.';
}
elseif ($match == 0)
{
echo "Введен неправильный e-mail: $dat";
}
else
{
echo "Введен корректный e-mail: $dat";
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Регулярное выражение</title>
</head>
<body>
<form method="post">
<p>
Ввести e-mail:
</p>
<input type="text" name="dat">
<input type="submit">
</form>
</body>
</html>
Так это выглядит в браузере: посмотреть в новом окне
Еще одна задачка на тему регулярных выражений.
Найдет практическое применение у сайтостроителей.
1. Создайте текстовую область. Обработайте форму и замените все найденные адреса сайтов в тексте на "ссылка удалена".
2. Все найденные адреса сохраните в массив. И выведите получившийся текст и массив с адресами сайтов.
Решение:
<?php
function replaceSite ($text)
{
$text = $_POST['text'];
$reg = "/(http:\/\/|https:\/\/)([a-z]+[-_\.]*[a-z]*.[(ru)(com)(info)(рф)])|([a-z]+[-_\.]*[a-z]*.[(ru)(com)(info)(рф)]\/*[a-z]*.[a-z]*.[a-z]*.\w*)/i";
return preg_replace ($reg, "<ссылка_удалена>", $text);
}
echo replaceSite($text);
echo "<br />";
$text = $_POST['text'];
$reg = "/(http:\/\/|https:\/\/)([a-z]+[-_\.]*[a-z]*.[(ru)(com)(info)(рф)])|([a-z]+[-_\.]*[a-z]*.[(ru)(com)(info)(рф)]\/*[a-z]*.[a-z]*.[a-z]*.\w*)/i";
preg_match_all ($reg, $text, $matches);
echo "<br />";
print_r ($matches);
echo "<br />";
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Регулярное выражение</title>
</head>
<body>
<form method="post">
<p>
Ввести комментарий:
</p>
<p><textarea rows="10" cols="45" name="text"></textarea></p>
<input type="submit">
</form>
</body>
</html>
Реализация в браузере: посмотреть в новом окне