2014-11-05 2 views
1

Мне нужна функция PHP для извлечения строки после @ Например, на Facebook, если вы пишете имя_пользователя, имя пользователя будет автоматически заменено URL-адресом профиля. Я хочу сделать что-то подобное, чтобы обнаружить имя_пользователя, чтобы узнать, существует ли имя пользователя в базе данных, а если существует, тогда скрипт вернет URL своего профиля. Я знаю, чтобы проверить, существует ли имя пользователя в базе данных и генерировать URL-адрес профиля, но я не знаю, как определить имя @username из строки (также может быть @ username1, @ username2 и т. Д. В той же строке). Я буду очень признателен, если вы можете дать мне пример или предоставить мне функцию для этого. Спасибо!Строка извлечения PHP после @

+0

Посмотрите вверх [ 'preg_replace_callbac()'] (http://php.net/preg_replace_callback) – kero

+0

Что такое допустимые символы для имен пользователей? – Halcyon

+0

Я использую эту функцию для проверки имен пользователей: preg_match ("/^([a-zA-Z] {4,16})? ([A-zA-Z] [a-zA-Z0-9 _] {4,16 }) $/i ", $ login) – Alexander

ответ

2

непроверенная, но регулярное выражение заменить (@[A-Za-z0-9]{1,})

найти любой символ A-z0-9 (то, что обычно принимается в качестве имени пользователя)

$text = preg_replace_callback(
     '@([A-Za-z0-9]{1,})', 
     function ($matches) { 
      return '<a href="profileURL">'.$matches[1].'</a>'; 
     }, 
     $text 
    ); 

UPDATE

Основываясь на комментарий, вы может генерировать массив с

preg_match_all('@([A-Za-z0-9]{1,})', $text, $matches);

Это возвращает многомерный массив с $matches[0] быть оригинальный текст и $matches[1] с массивом найденных имен (минус @)

+0

Почему бы не' preg_replace ('/ (@ [A-Za-z0-9] {1,}) /', '$1', $ text); '? –

+1

Спасибо, но мне нужно извлечь все эти имена в массиве, тогда я буду использовать этот массив для проверки и проверки по одному, чтобы узнать, существует ли имя пользователя в базе данных или нет. Если существует, я буду генерировать URL-адрес, если не оставил его как есть. Проблема в том, что я не знаю, как извлечь все эти имена пользователей, ведь @ из строки. – Alexander

+0

@Amal Вы можете это сделать, но путем предоставления обратного вызова 'profileURL' можно заменить на фактический URL. @Alexander альтернатива, если вам нужен массив, см. Мое обновление. – AbstractChaos

1

Если вы уверены, что «@» произойдет только один раз в строке, вы можете использовать функцию php, чтобы пропустить первый символ и взять остальную часть. Или же используйте str_replace(), чтобы заменить «@» на строку. Но если есть возможность получить руду, чем символы «@» в строке, то, вероятно, вы можете использовать explode() для «@» и получить только все строки. Но да, вы должны проверить на валидации в массиве, который вы получите.

Смежные вопросы