【问题标题】:How to validate a Twitter username using Regex如何使用正则表达式验证 Twitter 用户名
【发布时间】:2011-05-24 09:02:01
【问题描述】:

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

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

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

谁能帮我找到解决办法。

【问题讨论】:

  • 请注意,自 PHP 5.3.0 起,ereg* 函数已被弃用,请改用 preg_* 函数,在本例中为 preg_match。
  • 向我们展示输入、预期输出和实际输出也会对我们有所帮助...
  • 我相信这是stackoverflow.com/questions/4766158/…的副本

标签: php regex validation twitter


【解决方案1】:

验证字符串是否是有效的 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

【讨论】:

  • 上述模式也将匹配电子邮件地址,例如someone@email.com 将返回@email,这显然不是作为 Twitter 用户名。我通过添加负前瞻 (?![.A-Za-z]) 来解决此问题 完整字符串:/@([A-Za-z0-9_]{1,15})(?![.A- Za-z])/
  • 不是 [A-Za-z0-9_] 与 \w
  • @KryptoniteDove 的评论应该被用作这里的答案,因为它是正确的并且克服了一个恼人的问题。请问可以更新吗? regexr.com/38pig
【解决方案2】:

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

【讨论】:

  • 我认为,Twitter 允许在其用户名中至少包含 3 个字符。
  • 我认为现在可以,但以前用户可以注册较短的用户名(如@a),因此您仍然需要至少使用 1 个字符才能捕获这些。跨度>
  • 感谢您的回答。你在哪里找到字符集?我的意思是,您从哪里了解到 Twitter 用户名可以是 [A-Za-z0-9_]{1,15} ?
  • 好吧,我搜了一下推特的开源代码,发现居然是 /[a-zA-Z0-9_]{1,20}/ 。来源:github.com/twitter/twitter-text-js/blob/…
  • @Qualcuno,我相信这是你真实姓名的限制。我所看到的任何地方的句柄限制都是 15。
【解决方案3】:

不要将/ereg* 一起使用。

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

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

S

【讨论】:

    【解决方案4】:

    您的正则表达式是有效的,尽管它允许空格仅供参考。 (如果你想测试正则表达式,我推荐: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】:

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2021-11-28
          • 2017-10-04
          • 1970-01-01
          • 1970-01-01
          • 2012-08-14
          • 1970-01-01
          相关资源
          最近更新 更多