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

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

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

При этом я проверяю, является ли вход действительным именем пользователя 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

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

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

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

S

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

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

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

Первый вопрос здесь – использование eregi которое устарело от PHP 5.3. preg_match этого рекомендуется использовать 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

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