2010-12-12 62 views
19

验证一个Twitter用户名我已经使用的模式/[a-z0-9_]+/i函数内:如何使用正则表达式

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

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

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

+1

请注意,ereg *函数从PHP 5.3.0开始已弃用,请使用preg_ *函数,而在此情况下使用preg_match。 – 2010-12-12 21:40:19

+0

向我们展示输入,预期输出和实际输出也将对我们有所帮助... – npinti 2010-12-12 21:41:06

+0

我相信这是http://stackoverflow.com/questions/4766158/php-to-replace-username-with -link-to-twitter-account – Dan 2013-04-30 21:38:57

回答

36

为了验证一个字符串是否是一个有效的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到linkify用户名中的字符串。

编辑:Twitter也open sourced text libraries为Java和Ruby匹配的用户名,哈希标签等。您可能可以看看代码,并找到他们使用的正则表达式模式。

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

+3

上述模式也将匹配电子邮件地址,例如[email protected]会返回@email,这显然不是Twitter用户名。我解决了这个问题,增加了负向预测(?![.A-Za-z])全字符串:/@([A-Za-z0-9_]{1,15})(?![.A- Za-z])/ – KryptoniteDove 2013-02-25 20:25:48

+2

不是[A-Za-z0-9_]与\ w – Ayyash 2013-07-03 06:09:48

+1

相同@ KryptoniteDove的评论应该在这里用作答案,因为它是正确的并克服了一个烦人的问题。你能更新吗? http://regexr.com/38pig – EvilDr 2014-05-01 13:51:38

2

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

3

请勿使用/ereg*

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

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

小号

2

eregi()不会对任何/或额外的切换。只需使用eregi('[a-z0-9_]+')

2

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

+1

我想,Twitter允许他们的用户名至少有3个字符。 – 2011-12-20 20:11:14

+1

我认为它现在可以,但以前的用户能够注册较短的用户名(如[@a](https://twitter.com/a)),所以您仍然需要使用至少1个字符抓住这些。 – cmbuckley 2012-03-27 14:18:56

+1

感谢您的回答。你在哪里找到字符集?我的意思是,你在哪里读过Twitter用户名可以是[A-Za-z0-9 _] {1,15}? – Qualcuno 2012-04-27 09:15:52