ВСЕ СТАТЬИ
Блог начинающего программиста
Регистрация

Регулярные выражения

Опубликовано:

Служат для поиска фраз, слов, символов в тексте. Эти созданные шаблоны ищут подстроку в тексте. Регулярные выражения позволяют одной строкой выполнить например, такие задачи: узнать, имеются ли в строке цифры; найти и заменить или удалить несколько вопросительных знаков, идущих подряд; найти в тексте почтовые адреса, телефонные номера.

Незнание и недопонимание о функциональности Регулярных выражений сильно затруднит работу в веб-программировании. Основная трудность заключается в синтаксисе таких функций со множеством специальных символов. Их трудно запомнить.

Задача:

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>

Реализация в браузере: посмотреть в новом окне

Комментарии

Пока комментарий нет

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

Зарегистрироваться
Имя:
Электронная почта:
Текст комментария:
Введите код с картинки:
картинка