Как проверить имя пользователя Twitter с помощью регулярного выражения
Я использовал шаблон /[a-z0-9_]+/i
в функции:
function validate_twitter($username) {
if (eregi('/[a-z0-9_]+/i', $username)) {
return true;
}
}
С помощью этого я проверяю, является ли введенное имя пользователя действительным в Twitter, но у меня возникают трудности, так как оно не дает мне действительного результата.
Может ли кто-нибудь помочь мне найти решение.
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
Не используйте /
с ereg*
.
На самом деле, вообще не используйте ereg*
, если вы можете этого избежать. http://php.net/preg_match
редактировать: Обратите также внимание, что /[a-z0-9_]+/i
будет совпадать с spaces are invalid
и not-a-real-name
. Вы почти наверняка хотите /^[a-z0-9_]+$/i
.
S
Я полагаю, что вы используете форму PCRE, и в этом случае вам следует использовать вместо нее функцию preg_match.
eregi()
не будет ожидать никаких /
или дополнительных переключений. Просто используйте eregi('[a-z0-9_]+')
Ваше регулярное выражение допустимо, хотя оно допускает пробелы, к вашему сведению. (Если вы хотите протестировать регулярные выражения, я рекомендую: 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
Имена пользователей Twitter имеют от 1 до 15 символов... так что это могло бы быть еще лучше с /^[a-z0-9_]{1,15}$/i
.