如何使用Regex验证Twitter用户名

use*_*208 19 php regex twitter validation

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

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

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

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

Chr*_*rey 37

要验证字符串是否是有效的Twitter句柄:

function validate_username($username)
{
    return preg_match('/^[A-Za-z0-9_]{1,15}$/', $username);
}
Run Code Online (Sandbox Code Playgroud)

如果你想@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);
Run Code Online (Sandbox Code Playgroud)

您可以将后者与preg_replace_callback一起使用来链接字符串中的用户名.

编辑:Twitter还为Java和Ruby 开源文本库,用于匹配用户名,哈希标记等.您可以查看代码并找到他们使用的正则表达式模式.

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

  • 上述模式也将匹配电子邮件地址,例如someone@email.com将返回@email,这显然不是Twitter用户名.我通过添加一个负向前瞻(?![.A-Za-z])来修复此问题.全字符串:/@([A-Z-z0-9_] {1,15})(?![.A- ZA-Z])/ (4认同)
  • 不是[A-Za-z0-9_]与\ w相同 (2认同)