Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: как выбрать username из [@username]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
TUDEAL
Отправлено: 22 Октября, 2013 - 21:07:48
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)

[+]


Есть строка для обращения к пользователям
[@username]
где username логин пользователя к кому мы обращаемся в чате и может иметь разную длину
как отсюда выбрать именно этот username и откинуть [@]
сообщение может быть обращено сразу к нескольким людям таким образом
[@user1][@user2][@user3] и.т.д... нужно выбрать все 3 логина и если в списке имеется твой подсветить сообщение
 
 Top
esterio
Отправлено: 23 Октября, 2013 - 11:49:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




регулярка
PHP:
скопировать код в буфер обмена
  1. preg_match_all('/\[@([^\]]+)\]/s', $string, $matches, PREG_SET_ORDER);
  2. var_dump($matches);
 
 Top
LIME
Отправлено: 23 Октября, 2013 - 12:04:08
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




PHP:
скопировать код в буфер обмена
  1. $users=array_map(function($a){
  2.     return trim($a,'@[]');},explode('][',$usersStr));
 
 Top
TUDEAL
Отправлено: 23 Октября, 2013 - 21:16:18
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)

[+]


Еще вопрос, где можно взять подробную инструкцию по этим функциям?)
 
 Top
IllusionMH
Отправлено: 23 Октября, 2013 - 21:21:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




TUDEAL, клик по подчеркнутым названиям функций. Либо искать в официальной документации на http://php.net (тут еще и примеры в комментариях)
 
 Top
TUDEAL
Отправлено: 23 Октября, 2013 - 23:20:54
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)

[+]


Короче ни одним из способов не подошел, сделал по своему.
PHP:
скопировать код в буфер обмена
  1. function user_parsing($u)
  2. {
  3.     $u = preg_replace( "#\[@(.+?)\\]#is" , "<b> » \\1</b>" ,$u);
  4.     return $u;
  5. }

Но одна проблема, если в чате пишут тебе [@username] то твой ник должен выделиться зеленым цветом, а остальные остаться черными, сообщение может даже иметь такой вид "текст [@UserName] сообщения" должно вывестись так "текст UserName сообщения" и если UserName это ты то оно должно подсветиться зеленым.
Пробовал так
PHP:
скопировать код в буфер обмена
  1. function user_parsing($u)
  2. {
  3.     function matches($str1)
  4.     {
  5.         $str2 = $_SESSION['login'];
  6.         if($str1==$str2)
  7.         {
  8.             return '<b class="adress_me">';
  9.         }
  10.         else
  11.         {
  12.             return '<b class="adress_orher">';
  13.         }
  14.     }
  15.     $u = preg_replace( "#\[@(.+?)\\]#is" , matches('\\1')." » \\1</b>" ,$u);
  16.     return $u;
  17. }

Но так тоже не работает потому что $str1 и $str2 определяются как различные, хотя при попытка вывести их выводятся как одинаковые на экран, но $str2 привести к нижнему регистру не возможно, md5 код у обоих значений разный, приведение типов не помогает, смена кодировки через iconv тоже результата не дает -_-
 
 Top
Мелкий Супермодератор
Отправлено: 24 Октября, 2013 - 09:39:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




PHP:
скопировать код в буфер обмена
  1. $sMyLogin = $_SESSION['login'];
  2. return preg_replace_callback( "#\[@([^\]]+)\]#is" , function($matches) use($sMyLogin) {
  3. if ($sMyLogin == $matches[1]) return '<b> » '.$sMyLogin.'</b>';
  4. else return $matches[1];
  5. } ,$u);


Сравнение логинов регистрозависимое.


-----
PostgreSQL DBA
 
 Top
TUDEAL
Отправлено: 25 Октября, 2013 - 02:52:50
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)

[+]


Мелкий пишет:
PHP:
скопировать код в буфер обмена
  1. $sMyLogin = $_SESSION['login'];
  2. return preg_replace_callback( "#\[@([^\]]+)\]#is" , function($matches) use($sMyLogin) {
  3. if ($sMyLogin == $matches[1]) return '<b> » '.$sMyLogin.'</b>';
  4. else return $matches[1];
  5. } ,$u);



Вот, именно то что я и искал! Спасибо! Закатив глазки

(Отредактировано автором: 25 Октября, 2013 - 02:53:24)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB