如何使用Regex验证Twitter用户名

时间:2010-12-12 21:36:56

标签: php regex validation twitter

我在函数中使用了模式/[a-z0-9_]+/i

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

有了这个,我测试输入是否是有效的推特用户名,但我遇到了困难,因为它没有给我一个有效的结果。

有人可以帮我找到解决方案。

6 个答案:

答案 0 :(得分:37)

验证字符串是否是有效的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也open sourced text libraries用于Java和Ruby,用于匹配用户名,哈希标签等。您可以查看代码并找到他们使用的正则表达式模式。

编辑(2):这是Twitter文本库的PHP端口:https://github.com/mzsanford/twitter-text-php#readme

答案 1 :(得分:3)

请勿将/ereg*一起使用。

事实上,如果可以避免,请不要使用ereg*http://php.net/preg_match

编辑:另请注意,/[a-z0-9_]+/i将与spaces are invalidnot-a-real-name匹配。你几乎肯定想要/^[a-z0-9_]+$/i

取值

答案 2 :(得分:2)

我相信您正在使用PCRE表单,在这种情况下,您应该使用preg_match函数。

答案 3 :(得分:2)

eregi()不会指望任何/或其他切换。只需使用eregi('[a-z0-9_]+')

即可

答案 4 :(得分:2)

您的正则表达式有效,但它允许空格FYI。 (如果你想测试正则表达式,我建议:http://rubular.com/)。

这里的第一个问题是您使用的eregi自PHP 5.3起已弃用。建议您使用preg_match,它具有相同的语法。尝试一下,看看它是否有帮助。

preg_match的PHP文档:http://www.php.net/manual/en/function.preg-match.php eregi的PHP文档:http://php.net/manual/en/function.eregi.php

答案 5 :(得分:2)

Twitter用户名有1到15个字符...所以使用/^[a-z0-9_]{1,15}$/i可能会更好。