Регулярные выражения, очень полезная штука для разработчиков. С помощью них можно найти одинаковые слова в тексте, проверить введенные данные и еще много полезных вещей. В этом посте я собрал 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 "Время введено неправильно"; }
- Регер аккаунтов 100zakladok.ru
- Создаем индикатор сложности пароля
- Определение страны по IP на PHP
- Yii, Модуль SRBAC часть 2. Пишем регистрацию.
- 3 скрипта созданные от скуки
Теги: PHP
Здравствуйте!
Подскажите пожалуйста, можно ли создать !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
отличная подборка простых примеров для новичков
Reply
Рекомендую дорисовать инфу о том, что если работают с кириллицией — пусть ставят модификатор u в конце регулярки )
Reply
Spasibo ogromnoje 🙂
Reply
Ошибка в тексте:
Время должно быть задано в таком виде: hh:mm.
Reply
Еще бы для htaccess похожую подборочку.
Reply
Max Reply:
Март 15, 2013 at 18:11
Уже есть — http://2coders.ru/useful-rules-htaccess/
Reply
Отличная подборка очень простых примеров, для очень новичков)
Reply