Как проверить имя пользователя Twitter с помощью Regex - PullRequest
19 голосов
/ 13 декабря 2010

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

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

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

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

Ответы [ 6 ]

37 голосов
/ 13 декабря 2010

Чтобы проверить, является ли строка допустимым дескриптором 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

3 голосов
/ 13 декабря 2010

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

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

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

S

2 голосов
/ 29 сентября 2011

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

2 голосов
/ 13 декабря 2010

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

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

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

2 голосов
/ 13 декабря 2010

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

2 голосов
/ 13 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...