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

Регулярные выражения, очень полезная штука для разработчиков. С помощью них можно найти одинаковые слова в тексте, проверить введенные данные и еще много полезных вещей. В этом посте я собрал 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 "Время введено неправильно";
}
- PHP
Категории
- Регер аккаунтов 100zakladok.ru
- Создаем индикатор сложности пароля
- Yii, Модуль SRBAC часть 2. Пишем регистрацию.
- Определение страны по IP на PHP
- 3 скрипта созданные от скуки

14 коммент.
Здравствуйте!
Подскажите пожалуйста, можно ли создать !preg_match для проверки цифр?
т.е. мой вариант:
if(!preg_match(«/[0-9]/i», $_POST['index']))
проверяет наличие цифр в поле, однако если я ввожу индекс так – 45646-+ или даже так 4564ыва456 – форма проходит проверку и данные отправляются.
Хотелось бы сделать так, что б отправка происходила только при 100% наличии цифр в поле, и никаких иных символов.
Вот…
Reply
clayton, попробуй так:
if(!preg_match(«/^[0-9]{1,}$/», $str))
Reply
Nikolas Reply:
Сентябрь 22, 2009 at 0:46
Доброго времени суток! А чтоб проверить например такой формат чтоб разрешало еще скобки например номер телефона 3(333)3333333 ну возможно еще и так плюс 3(333)333-33-33, ато скобки не пропускает как разрешить?
Reply
О! большое Вам спасибо!
Reply
Вопрос собсна еще один остается.
Можно ли сделать так, что б после вывода ошибки, данные заполненные оставались в полях, а не очищались.
Это сложно?
Reply
Нет, это не сложно. Реализуется с помощью сессий. Строчек 7 кода
.
Reply
Я Вам конечно готов в замен что-нибудь сверстать)
Reply
Вам не сложно будет сюда их вписать?
<?
}
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
clayton, в случаи ошибки записываете нужные данные в сессию.
$_SESSION['email'] = $_POST['email'];
После этого делаете редирект на свою форму, в форме подставляете значение вашей сессии.
input type=»text» name=»email» id=»email» value=»< ?=@$_SESSION['email'];?>» size=»30″
Reply
Благодарю!
Всегда готов помочь, чем смогу)
Контакты найдете в моем бложике)
Reply
А, что это действительно пашет в реальных условия,
Reply
Да, это действительно «пашет» в реальных условиях
Reply
Вот и мне пригодились)))
Reply
если без редиректа то можна не сохранять в сесию
так как еще будет доступен массив $_POST с введенними данними
Reply