我需要一个javascript正则表达式来匹配twitter用户名。
用户在注册时输入用户名,因此我不想分散太多错误通知。因此,如果他们在用户名之前有@,我需要表达式匹配有效的用户名。
Twitter用户名可以包含拉丁字符,下划线和数字,唯一的限制是最长可达15个字符。 (但我需要正则表达式匹配16个字符,以防有人在用户名之前输入@。)
答案 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投票第二多的答案中提供的文字测试了拟定的正则表达式,以检查是否匹配。
屏幕截图,
答案 8 :(得分:-1)
要排除“非拉丁语”字符,您必须使用:^@?([a-zA-Z0-9_]){1,15}$
。因为,\w
接受“任何单词字符”。非拉丁字符符合这种条件。因此,它甚至匹配土耳其字符üö
。