twitter用户名的正则表达式

时间:2011-12-27 22:37:07

标签: javascript regex

我需要一个javascript正则表达式来匹配twitter用户名。

用户在注册时输入用户名,因此我不想分散太多错误通知。因此,如果他们在用户名之前有@,我需要表达式匹配有效的用户名。

Twitter用户名可以包含拉丁字符,下划线和数字,唯一的限制是最长可达15个字符。 (但我需要正则表达式匹配16个字符,以防有人在用户名之前输入@。)

9 个答案:

答案 0 :(得分:39)

这应该做: ^@?(\w){1,15}$

答案 1 :(得分:33)

这是我发现替换多次出现的推特用户名的最佳解决方案。

执行该技巧的正则表达式是/(^|[^@\w])@(\w{1,15})\b/。我正在捕捉@字符背后的内容,以便我可以正确替换用户名。我正在使用全局匹配标志(g),因此它将替换所有出现的事件。 asenovm答案很简单,但在大多数用户输入上下文中都无效,因为techexpert正在his comment中解释。

var output,
    text    = "@RayFranco is answering to @AnPel, this is a real '@username83' but this is an@email.com, and this is a @probablyfaketwitterusername",
    regex   = /(^|[^@\w])@(\w{1,15})\b/g,
    replace = '$1<a href="http://twitter.com/$2">@$2</a>';

output = text.replace( regex, replace );

console.log ( output );

这给了我预期的(使用节点v0.9.1测试)

  

@RayFranco正在回复@AnPel,这是一个真正的“@username83”,但这是一个@email.com,这是@probablyfaketwitterusername

这基于Twitter "specs" for username

  

您的用户名不能超过15个字符。您的真实姓名可以更长(20个字符),但为了方便起见,用户名会更短。如上所述,用户名只能包含字母数字字符(字母A-Z,数字0-9),但下划线除外。检查以确保所需的用户名不包含任何符号,短划线或空格。

希望这有帮助。

答案 2 :(得分:3)

简单易行的方法:

function validTwitteUser(sn) {
    return /^[a-zA-Z0-9_]{1,15}$/.test(sn);
}

答案 3 :(得分:1)

这可能对Full Match有所帮助:

^@(?=.*\w)[\w]{1,15}$

测试:@John_Doe2000

结果:

Match 1
Full match  0-13    @John_Doe2000

尝试Here

答案 4 :(得分:0)

这可能比你需要的多,但我在另一篇文章“regex how to replace twitter links”中找到了这个。包装@ usernames,#hashtags和网址。对我有用。

function processTweetLinks(text) {
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi;
    text = text.replace(exp, "<a href='$1' target='_blank'>$1</a>");
    exp = /(^|\s)#(\w+)/g;
    text = text.replace(exp, "$1<a href='https://twitter.com/hashtag/$2?src=hash' target='_blank'>#$2</a>");
    exp = /(^|\s)@(\w+)/g;
    text = text.replace(exp, "$1<a href='http://www.twitter.com/$2' target='_blank'>@$2</a>");
    return text;
}

答案 5 :(得分:0)

@ [a-zA-Z0-9 _] {0,15}

您可以使用上述正则表达式从混合数据集中对Twitter用户名进行排序

答案 6 :(得分:0)

我认为正确的正则表达式是这个/^@(\w){1,15}/g,不带?在@(at)

答案 7 :(得分:0)

另一项工作是:

/(?<!\w)@[\w+]{1,15}\b /

  • 如果前面没有字符值,则第一部分(?<!\w)@@匹配。 可以用作格式为text@mail.com的潜在电子邮件地址的过滤器。由于@前有文本,因此电子邮件地址不匹配。

  • 第二部分[\w+]{1,15}\b与Twitter用户名中接受的一串单词字符匹配,即a-z,A-Z,0-9,_。单词边界锚点\b与单词字符和非单词字符之间的空格匹配。 Twitter用户名中不接受非单词字符,因此由于\b而被排除在匹配之外。

最后但并非最不重要的一点是,我提供了一张图片,其中我对rayfranco投票第二多的答案中提供的文字测试了拟定的正则表达式,以检查是否匹配。

屏幕截图, screenshot image

答案 8 :(得分:-1)

要排除“非拉丁语”字符,您必须使用:^@?([a-zA-Z0-9_]){1,15}$。因为,\w接受“任何单词字符”。非拉丁字符符合这种条件。因此,它甚至匹配土耳其字符üö