Как проверить имя пользователя Twitter с помощью регулярного выражения


Я использовал шаблон /[a-z0-9_]+/i в функции:

function validate_twitter($username) {
 if (eregi('/[a-z0-9_]+/i', $username)) {
  return true;
 }
}

С помощью этого я проверяю, является ли введенное имя пользователя действительным в Twitter, но у меня возникают трудности, так как оно не дает мне действительного результата.

Может ли кто-нибудь помочь мне найти решение.

Author: Bo Persson, 2010-12-13

6 answers

Чтобы проверить, является ли строка допустимым дескриптором Twitter:

function validate_username($username)
{
    return preg_match('/^[A-Za-z0-9_]{1,15}$/', $username);
}

Если вы пытаетесь сопоставить @username внутри строки.

Например: RT @username: lorem ipsum @cjoudrey etc...

Используйте следующее:

$string = 'RT @username: lorem ipsum @cjoudrey etc...';
preg_match_all('/@([A-Za-z0-9_]{1,15})/', $string, $usernames);
print_r($usernames);

Вы можете использовать последнее с preg_replace_callback, чтобы связать имена пользователей в строке.

Редактировать: Twitter также текстовые библиотеки с открытым исходным кодом для Java и Ruby для сопоставления имен пользователей, хэш-тегов и т. Д.. Вероятно, вы могли бы заглянуть в код и найти регулярное выражение шаблоны, которые они используют.

Редактировать (2): Вот PHP-порт текстовой библиотеки Twitter: https://github.com/mzsanford/twitter-text-php#readme

 36
Author: Christian Joudrey, 2012-12-12 20:21:24

Не используйте / с ereg*.

На самом деле, вообще не используйте ereg*, если вы можете этого избежать. http://php.net/preg_match

редактировать: Обратите также внимание, что /[a-z0-9_]+/i будет совпадать с spaces are invalid и not-a-real-name. Вы почти наверняка хотите /^[a-z0-9_]+$/i.

S

 3
Author: scoates, 2010-12-12 21:46:46

Я полагаю, что вы используете форму PCRE, и в этом случае вам следует использовать вместо нее функцию preg_match.

 2
Author: mdarwi, 2010-12-12 21:40:29

eregi() не будет ожидать никаких / или дополнительных переключений. Просто используйте eregi('[a-z0-9_]+')

 2
Author: Mario, 2010-12-12 21:41:06

Ваше регулярное выражение допустимо, хотя оно допускает пробелы, к вашему сведению. (Если вы хотите протестировать регулярные выражения, я рекомендую: http://rubular.com/).

Первая проблема здесь заключается в том, что вы используете eregi, который устарел с PHP 5.3. Рекомендуется использовать вместо этого preg_match, он имеет тот же синтаксис. Попробуйте и посмотрите, поможет ли это.

Документация PHP для preg_match: http://www.php.net/manual/en/function.preg-match.php Документация по PHP для эреги: http://php.net/manual/en/function .eregi.php

 2
Author: Austin Lin, 2010-12-12 21:44:09

Имена пользователей Twitter имеют от 1 до 15 символов... так что это могло бы быть еще лучше с /^[a-z0-9_]{1,15}$/i.

 2
Author: Cotta, 2011-09-29 05:12:01