Оглавление

15.8.1. Разбираем адрес электронной почты на составные части.

Разбираем адрес электроннойпочты на составные части.
Проверяем правильность введенной даты

 

Так как мы настроили сервер на кодировку windows-1251, для запуска примеров необходимо указать кодировку в программе явным образом. Шаблон программы будет выглядеть так:

<?php
header('Content-Type: text/html; charset=utf-8');
// Сюда вставляем примеры из этого раздела
?>

Notepad++Кроме того, файл необходимо сохранить в кодировке UTF-8. Использовать для этого Блокнот нельзя, так как он вставляет в начало файла служебные символы (называемые сокращенно ВОМ). Для кодировки UTF-8 эти символы не являются обязательными и не позволят нам установить заголовки ответа сервера с помощью функции header(). Для сохранения файлов следует использовать программу Notepad++. В меню Кодировки устанавливаем флажок Кодировать в UTF-8 (без ВОМ), а затем набираем код. В случае копирования кода через буфер обмена советую вначале сохранить пустой файл в кодировке UTF-8 без ВОМ, вставить код из буфера обмена, а затем сохранить файл с помощью соответствующей кнопки на панели инструментов.

 

Прежде чем использовать функции для работы с регулярными выражениями формата  POSIX,  необходимо  настроить  кодировку с  помощью  функции mb_regex_encoding() :

mb_regex_encoding('UTF-8'); // Установка кодировки

 

Использовать регулярные выражения формата POSIX позволяют следующие функции:
□ mb_ereg() выполняет поиск в строке с помощью регулярного выражения. Зависит от регистра символов. Функция имеет следующий формат:
mb_ereg(<Регулярное выражение>, <Строка>, [<Массив>]);
В параметре <массив> сохраняются соответствия подвыражений с шаблоном:

mb_regex_encoding('UTF-8'); // Установка кодировки
$str = 'unicross@mail.ru';
$Mass = array();
mb_ereg("^([a-z0-9_.-]+)@(([a-z0-9\-]+\.)+[a-z]{2,6})$", $str,
     $Mass);
foreach($Mass as $var) {
   echo $var . '<br>';
}


Этот пример выведет HTML-код, который в Web-браузере отображается так:

unicross@mail.ru
unicross
mail.ru
mail.


Первый элемент массива соответствует найденной строке, второй — строке в первых круглых скобках, третий — во вторых круглых скобках и т. д.;
□ mb_eregi()  выполняет  поиск  в  строке  с  помощью  регулярного  выражения без учета регистра символов. Имеет такой же формат, как и функция mb_ereg().

С помощью функций mb_ereg() и mb_eregi() обычно проверяются входные данные. Например, правильность ввода E-mail можно проверить следующим образом:

mb_regex_encoding('UTF-8'); // Установка кодировки
$str = 'unicross@mail.ru';
$pattern = "^[a-z0-9_.-]+@([a-z0-9-]+\.)+[a-z]{2,6}$";
if (mb_eregi($pattern, $str)) echo "Нормально";
else echo "Нет";
// Выведет: Нормально


□ mb_ereg_replace() возвращает строку, которая является результатом поиска и замены в исходной строке с использованием регулярного выражения. Функция по умолчанию зависит от регистра символов и имеет следующий формат:
mb_ereg_replace(<Регулярное выражение>, <Новый фрагмент>,

                  <Исходная строка>, [<Модификатор>]);
Необязательный параметр <Модификатор> может содержать комбинацию следующих флагов:
• i —  поиск  без  учета  регистра. С  русскими  буквами  возможны  проблемы;
• m —  поиск  в  строке,  состоящей  из  нескольких  строк,  разделенных символом  новой  строки. Метасимвол "точка"  соответствует  любому символу, кроме символа перевода строки (\n);

• s — однострочный режим. Метасимвол "точка" соответствует любому символу, в том числе и символу перевода строки;
• x —  разрешает  использовать  в  регулярном  выражении  пробельные символы и однострочные комментарии;
• e — указывает, что в строке для замены указано выражение языка PHP, которое необходимо предварительно вычислить.


 Например:

mb_regex_encoding('UTF-8'); // Установка кодировки
$str = '2001, 2002, 2003, 2004, 2005';
$pattern = '200[14]';
echo mb_ereg_replace($pattern, '2007', $str, 's');
// Выведет: 2007, 2002, 2003, 2007, 2005


□ mb_eregi_replace()  выполняет  поиск  и  замену  без  учета  регистра  символов. Формат такой же, как и у функции mb_ereg_replace();
□ mb_split()  также  поддерживает  регулярные  выражения. Она  разделяет строку на подстроки по указанному разделителю и добавляет их в массив.
Например, такой код

mb_regex_encoding('UTF-8'); // Установка кодировки
$str = 'unicross@mail.ru';
$Mass = array();
$Mass = mb_split('[@.]', $str);
foreach ($Mass as $key) {
   echo $key . '<br>';
}

выведет код HTML, который отображается так:

unicross
mail
ru
Примечания:
  • ОБРАТИТЕ ВНИМАНИЕ
    В некоторых случаях функция mb_eregi() некорректно работает с буквами русского языка. По этой причине русские буквы лучше указывать и в верхнем и нижнем регистрах (например, [а-яА-яёЁ]).
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити