10 регулярных выражений для web-разработчиков



regex tools
Регулярные выражения, очень полезная штука для разработчиков. С помощью них можно найти одинаковые слова в тексте, проверить введенные данные и еще много полезных вещей. В этом посте я собрал 10 регулярных выражений, которые должны быть под рукой у любого web-разработчика.

Регулярное выражение Значение
foo Строка «foo»
^foo «foo» в начале строки
foo$ «foo» в конце строки
^foo$ В строке содержится только одно слово»foo»
[abc] a, b, или c
[a-z] Все буквы в нижнем регистре
[^A-Z] Любой символ, который не является буквой в верхнем регистре
[0-9.-] Любая цифра, точка или дефис
^[a-zA-Z0-9_]{1,}$ Любое слово содержащее 1 букву, цифру или _

PHP функции для работы с регулярными выражениями

Функция Описание
preg_match() Функция preg_match() ищет в заданном тексте совпадения с шаблоном, если совпадене есть возвращает true, если нет то false
preg_match_all() Функция выполняет поиск шаблона в статье
preg_replace() Функция preg_replace() выполняет поиск и замену по регулярному выражению
preg_split() Функция preg_split() разбивает строку по регулярному выражению
preg_grep() Функция preg_grep() возвращает массив, состоящий из элементов входящего массива , которые соответствуют заданному шаблону
preg_ quote() Функция preg_ quote() принимает строку и добавляет обратный слеш перед каждым служебным символом. Проще говоря, она экранирует символы

Валидация имени домена
Проверяем имя домена.

$url = "http://2coders.ru/";
if (preg_match('/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/', $url)) {
    echo "Все правильно";
} 
else 
{
    echo "Вы ввели неправильное имя домена";
}

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

$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque porttitor, odio at feugiat vulputate, neque nulla dignissim ante, ut posuere leo arcu at mauris.";
$text = preg_replace("/\b(odio)\b/i", '<span style="background:#eef938">\1</span>', $text);
echo $text;

Удаление повторяющихся слов
Написали пару одинаковых слов? Не проблема, с помощью этого регулярного выражения вы сможете их легко удалить.

$text = preg_replace("/s(w+s)1/i", "$1", $text);

Удаление повторяющихся знаков препинания
Почти тоже самое, что и регулярное выражение выше, только будут удаляться знаки препинания.

$text = preg_replace("/.+/i", ".", $text);

Автоматическая генерация смайликов
Замена смайликов на картинки.

$text = "Текст со смайликом =)";
echo str_replace('=)','<img src="smileys/smile.png">',$text);

Проверка логина
Логин может состоять из букв, цифр, дефисов и подчёркиваний. Длина от 3 до 16 символов.

!preg_match("/^[a-z0-9_-]{3,16}$/",$login)

Проверка email
Email должен быть такого вида: логин@поддомен.домен.

!preg_match("/^([a-z0-9_\.-]+)@([a-z0-9_\.-]+)\.([a-z\.]{2,6})$/",$email)

Проверяем шестнадцатиричный цвет
Цвет может быть задан и без «#»;

$color = "#555555";
if (preg_match('/^#?([a-f0-9]{6}|[a-f0-9]{3})$/', $color)) 
{
echo "Цвет введен правильно";
}

Получаем title страницы
С помощью этого регулярного выражения, можно вытащить title страницы.

$fp = fopen("http://www.2coders.ru","r");
while (!feof($fp) ){
    $page .= fgets($fp, 4096);
}

$title = eregi("<title>(.*)</title>",$page,$regs);
echo $regs[1];
fclose($fp);

Проверка времени
Время должно быть задано в таком виде: mm:hh.

$time = "10:11";
if (!preg_match('/^([0-1][0-9]|[2][0-3]):([0-5][0-9])$/', $time)) 
{
	echo "Время введено неправильно";
}


Теги:

Комментарии

  1. Здравствуйте!
    Подскажите пожалуйста, можно ли создать !preg_match для проверки цифр?

    т.е. мой вариант:

    if(!preg_match(«/[0-9]/i», $_POST[‘index’]))

    проверяет наличие цифр в поле, однако если я ввожу индекс так — 45646-+ или даже так 4564ыва456 — форма проходит проверку и данные отправляются.
    Хотелось бы сделать так, что б отправка происходила только при 100% наличии цифр в поле, и никаких иных символов.
    Вот…

    Reply

  2. clayton, попробуй так:
    if(!preg_match(«/^[0-9]{1,}$/», $str))

    Reply

    Nikolas Reply:


    Доброго времени суток! А чтоб проверить например такой формат чтоб разрешало еще скобки например номер телефона 3(333)3333333 ну возможно еще и так плюс 3(333)333-33-33, ато скобки не пропускает как разрешить?

    Reply

  3. О! большое Вам спасибо!

    Reply

  4. Вопрос собсна еще один остается.
    Можно ли сделать так, что б после вывода ошибки, данные заполненные оставались в полях, а не очищались.
    Это сложно?

    Reply

  5. Нет, это не сложно. Реализуется с помощью сессий. Строчек 7 кода :).

    Reply

  6. Я Вам конечно готов в замен что-нибудь сверстать)

    Reply

  7. Вам не сложно будет сюда их вписать?
    <?
    }

    function complete_mail() {
    $_POST['title'] = substr(htmlspecialchars(trim($_POST['title'])), 0, 1000);
    $_POST['mess'] = substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000);
    $_POST['name'] = substr(htmlspecialchars(trim($_POST['name'])), 0, 30);
    $_POST['tel'] = substr(htmlspecialchars(trim($_POST['tel'])), 0, 30);
    $_POST['email'] = substr(htmlspecialchars(trim($_POST['email'])), 0, 50);

    // проверка на ошибки
    if (empty($_POST['name']))
    output_err(0);
    if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['email']))
    output_err(1);
    if(empty($_POST['mess']))
    output_err(2);
    //сообщение
    $mess = '
    Доброго времени суток! Кто-то написал нам, через форму обратной связи:
    Имя отправителя: ‘.$_POST[‘name’].’
    Контактный телефон: ‘.$_POST[‘tel’].’
    Контактный email: ‘.$_POST[’email’].’
    ‘.$_POST[‘mess’];
    // $to — кому отправляем
    $to = ‘mail@sonnoecarstvo.ru’;
    // $from — от кого
    $headers = ‘=?windows-1251?B?’.base64_encode(‘Новое сообщение с сайта’).»?= \r\n»;
    $headers .= ‘Content-type: text/html; charset=windows-1251’ . «\r\n»;
    mail($to, $_POST[‘title’], $mess, «From:».$headers);
    echo ‘Спасибо! Ваше письмо отправлено.’;
    show_form();
    exit();
    }

    function output_err($num)
    {
    $err[0] = ‘ОШИБКА! Не введено имя.’;
    $err[1] = ‘ОШИБКА! Не верно указан e-mail.’;
    $err[2] = ‘ОШИБКА! Не введено сообщение.’;
    echo ».$err[$num].»;
    show_form();
    exit();
    }
    if (!empty($_POST[‘submit’])) complete_mail();
    else show_form();

    ?>
    У самого знаний не хватает… И друзья… Делают вид что помогают…

    Reply

  8. clayton, в случаи ошибки записываете нужные данные в сессию.
    $_SESSION[’email’] = $_POST[’email’];
    После этого делаете редирект на свою форму, в форме подставляете значение вашей сессии.
    input type=»text» name=»email» id=»email» value=»< ?=@$_SESSION['email'];?>» size=»30″

    Reply

  9. Благодарю!
    Всегда готов помочь, чем смогу)
    Контакты найдете в моем бложике)

    Reply

  10. А, что это действительно пашет в реальных условия,

    Reply

  11. Да, это действительно «пашет» в реальных условиях 🙂

    Reply

  12. Вот и мне пригодились)))

    Reply

  13. если без редиректа то можна не сохранять в сесию
    так как еще будет доступен массив $_POST с введенними данними

    Reply

  14. отличная подборка простых примеров для новичков

    Reply

  15. Рекомендую дорисовать инфу о том, что если работают с кириллицией — пусть ставят модификатор u в конце регулярки )

    Reply

  16. Spasibo ogromnoje 🙂

    Reply

  17. Ошибка в тексте:
    Время должно быть задано в таком виде: hh:mm.

    Reply

  18. Еще бы для htaccess похожую подборочку.

    Reply

    Max Reply:


    Уже есть — http://2coders.ru/useful-rules-htaccess/

    Reply

  19. Отличная подборка очень простых примеров, для очень новичков)

    Reply

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