Подтвердить что ты не робот

Как проверить имя пользователя Twitter с помощью Regex

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

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

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

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

4b9b3361

Ответ 1

Чтобы проверить правильность строки в тэге:

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

Ответ 2

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

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

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

S

Ответ 3

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

Ответ 4

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

Ответ 5

Ваше регулярное выражение действительно, хотя оно допускает пробелы FYI. (Если вы хотите проверить регулярные выражения, я рекомендую: 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

Ответ 6

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