Регулярное выражение не срабатывает, когда скрипт сохранён в кодировке UTF-8

korpus

злой бобёр
Регулярное выражение не срабатывает, когда скрипт сохранён в кодировке UTF-8

Использую выражение для проверки емейла. Когда скрипт с проверкой сохранён в кодировке windows, то проверка происходит нормально. Когда сохраняю в utf-8, то при наличии в емейле некоторых русских букв, например "у", регулярное выражение не срабатывает. Что здесь не так и как это можно исправить?

Код:
<?php
      $email="еее@mail.ru";
      $zip1='/(^[а-яa-z0-9_\.-]{1,}@([а-яa-z0-9_-]{1,}\.){1,}[а-яa-z0-9_-]{2,}$)/i';
      if (preg_match($zip1, $email)==1) $error_email='ошибки нет';
      echo $error_email;
?>
 

Mols

Новичок
Какой к шутам mb_string ?
Читать тут.
http://ua.php.net/manual/en/reference.pcre.pattern.syntax.php
http://ua.php.net/manual/en/regexp.reference.unicode.php
 

Онегин

Новичок
Добавьте к вашему модификатору i еще модификатор u и все заработает, вот так /iu.
 

Crys

Двинутый новичок
Простите, но с какой поры в e-mail'ах возможно использовать кириллицу?
 

AmdY

Пью пиво
Команда форума
кириллические домены уже можно, значит должно поддерживаться и мыло.
а вообще, забавно наблюдать, как люди до сих пор придумывают регулярки вместо filter_var($email, FILTER_VALIDATE_EMAIL)
 

Crys

Двинутый новичок
кириллические домены уже можно, значит должно поддерживаться и мыло.
То, что браузеры преобразовывают .рф в .xn--p1ai - не означает, что в "кириллическом" домене используется кириллица... Фиг его знает, как работает фильтр в PHP, но я бы просто конвертил мыло/домены в пуникод, а потом совал в фильтр... и не заморачивался..

-~{}~ 06.05.10 21:27:

Проверил. Кириллицу filter_var - не пропускает (совал в UTF-8)

PHP 5.2.6 - не понимает пуникодовые имена ("ломается" из-за цифры в доменной зоне)

PHP 5.3.0 - кирилицу не понимает, но корректно обработал пуникод.

Так что, либо регекспы, либо апгрейд до php 5.3 и использование конвертации в пуникод перед проверкой....
 
Сверху