За последние 24 часа нас посетили 59367 программистов и 1835 роботов. Сейчас ищут 928 программистов ...

Регулярное выражение и спец символы

Тема в разделе "Регулярные выражения", создана пользователем Bueno, 20 май 2010.

  1. Bueno

    Bueno Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Есть такая строка:
    $str="Vasilij petrov <vasilij@mail.ru>" и мне из неё надо достать только имя с фамилией, я использую такое рег. выражение

    Код (Text):
    1. preg_match("/[a-zA-Z0-9\s\-\.\"]{1,}/", $str, $name);
    Работает как надо но если отправитель в своём имени будет использовать к примеру такой вариант: Vāsilij pētrov
    то символы ā и ē он не пропускает и с них начинает новый цикл т.е.

    V
    silij p
    trov

    Что в этом случае можно сделать?
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  3. Bueno

    Bueno Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Проверил, результат такой-же. Может есть команда чтобы все utf-8 сивмолы пропускал за исключением некоторых?
     
  4. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Bueno
    Может стоит почитать RFC насчет разрешенных символов в e-mail?
     
  5. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    попробуйте модификатор u
     
  6. Bueno

    Bueno Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Simpliest
    RFC я посмотрел, я так понимаю это касается непосредственно самого email адреса, тут-же речь о имени и поддержка в этом случае распространяется на все языковые символы

    Volt(220)
    с "u" та-же беда
     
  7. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Код (Text):
    1. preg_match("#[^<]+#iu", $str, $name);
    У меня стработало.
     
  8. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Что-то в этом духе:

    PHP:
    1. <?php
    2.  
    3. $receiver = "Vasilij petrov <vasilij@mail.ru>";
    4.  
    5. try {
    6.     if(($email = strpos($receiver, 0x3C)) !== false) {
    7.         // Ищем парную скобку
    8.         if(($length = strpos($receiver, 0x3E))) {
    9.             $name  = trim(substr($receiver, 0, $email));
    10.             $email = trim(substr($receiver, $email, (++$length -$email)), "<>");
    11.         } else throw new Exception("Кривой формат");
    12.     } else {
    13.         $email = trim($receiver, "<>");
    14.         $name  = "";
    15.     }
    16. } catch (Exception $e) {
    17.     exit ($e->GetMessage());
    18. }
    19.  
    20. ?>
     
  9. Bueno

    Bueno Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Volt(220)
    Странно, если без спец символов то работает нормально а если добавить ā или č то не пропускает.

    Apple
    Хотелось бы решить проблему регуляркой.
     
  10. Bueno

    Bueno Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Вы хоть напишите реально ли решить эту задачу регулярным выражением?

    Я так понимаю что единственный выход это добавить все эти символы в регулярку, или я ошибаюсь?
     
  11. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    рабочее решение приведено во втором посте.
    ваши проблемы с кодировками а не рег. выражением.
    в рег добавить модификатор u. файл сохранить в utf-8
     
  12. Bueno

    Bueno Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Спасибо большое! Разобрался :)