Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11650
Последний выпуск: 19.06.2015

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

Что же такое "регулярные выражения"?

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

Рассмотрим простые (далеко не все) правила формирования шаблона.

Шаблон состовляется из набора модификаторов, некоторые из которых приведены в нижеследующей таблице.

\ - Следующий символ является специальным. Так же применяется для указания символов, которые могут использоваться в качестве модификаторов. \n - соответствует символу перевода строки
\* - символ "*", а * - модификатор
^ - Маркер начала строки. ^abc - строка, начинающаяся с "abc".
$ - Маркер конца строки. abc$ - строка, заканчивающаяся на "abc".
* - Предыдущий символ встречается 0 или больше раз. Шаблону w* соответствуют строки what, buka, agwt
+ - Предыдущий символ встречается 1 или больше раз. Шаблону w+ соответствуют строки what, agwt.
Строка buka уже не соответствует.
? - Предыдущий символ встречается 0 или 1 раз. Шаблону w?r соответствуют строки ara, awra.
. - Соответствует любому символу, отличному от "\n".  

Это простейшие модификаторы, знания которых нам пока хватит.

В PHP существует несколько функций для работы с регулярными выражениями: ereg(), ereg_replace(), eregi(), ereg_replacei() и split().

Функции с суффиксом i представляют из себя аналоги функций без этого суффикса, не чувствтительные к регистру операндов.

Рассмотрим функцию ereg(), синтаксис которой:

int ereg(string pattern, string string, array [regs]);

Рассмотрим некоторый адрес maxx@mail.ru. Очевидно, что правдоподобный адрес должен иметь вид "слово@слово.слово". В терминах шаблонов произвольный символ обозначается знаком "." (мы не будем сейчас учитывать тот факт, что в адресах допустимы не все символы). В каждом слове должен быть по крайней мере один символ, таким образом, шаблон слова будет иметь вид ".+". Вспомним теперь, что "." - это модификатор, и для явного указания точки (в качестве символа) нужно писать "\.".

Таким образом шаблон будет иметь вид ".+@.+\..+".

Наша проверка будет иметь следующий вид:

if (ereg(".+@.+\..+", $email)) {
    echo "Адрес, вроде, правильный";
    }
else {
    echo "Введите, батенька, адрес заново";
    }

После такой проверки мы можем быть уверены, что e-mail адрес имеет вид "слово@слово.слово".

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

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
86K
01 ноября 2012 года
John Steevenson
0 / / 01.11.2012
+1 / -0
Мне нравитсяМне не нравится
1 ноября 2012, 14:06:21
Функция ereg уже устарела, вместо ее можно использовать preg_match. Для отладки регулярных выражений можно пользоваться этим онлайн конструктором http://pcreonline.com/html-kommentarii/ (для примера выбор комментариев из html).
2.
71K
07 апреля 2011 года
NsboX
0 / / 07.04.2011
+0 / -1
Мне нравитсяМне не нравится
7 апреля 2011, 13:20:59
Вот вам готовая функция, которая на мой взгляд лучше всего проверит введённый e-mail адрес...
[php]
function validEmail($email) {

if ($email=="") { return false; }
$domain = @explode("@",$email);
$domain = @$domain[1];

return (!eregi("^([a-zA-Z0-9~\._-]{2,})(@{1}[a-zA-Z0-9~\._-]{2,})(\.{1}[a-zA-Z]{2,4})$",$email)) ? false : true ;
}
[/php]
3.
48K
23 марта 2009 года
Rude Boy
0 / / 23.03.2009
+1 / -0
Мне нравитсяМне не нравится
23 марта 2009, 03:14:32
хмммм, странно обратный слэш почему-то удалён из сообщения. перед символами @ и . ставится обратный слэш для экранирования.
4.
48K
23 марта 2009 года
Rude Boy
0 / / 23.03.2009
+1 / -1
Мне нравитсяМне не нравится
23 марта 2009, 03:11:22
Пример приведён неудачно. Он конечно будет работать, но в то же время совершенно спокойно пропустит адрес вида 99999@99999.99999
Правильней, на мой взгляд, будет использовать выражение вида [a-z0-9]+\@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+/i
5.
22K
11 декабря 2006 года
l0bSter
8 / / 11.12.2006
Мне нравитсяМне не нравится
19 февраля 2007, 14:25:57
тут же в статье сказано, что рассмотрены не все модификаторы
есть еще такая штука как скобки () которая и даст вам возможность получить мыло с доменным именем разных уровней
6.
Аноним
Мне нравитсяМне не нравится
3 апреля 2006, 11:12:46
адрес kipnisad@domain.org.ru будет распознан указанным регулярным выражением, поскольку . - любой символ. в том числе и точка
7.
Аноним
+1 / -2
Мне нравитсяМне не нравится
31 января 2006, 10:04:58
не согласен.
правдоподобный адрес может выглядеть и так:
kipnisad@domain.org.ru
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог