我需要一个JavaScript正则表达式来匹配Twitter用户名。
该用户名由用户在注册时输入,所以我不想用太多错误通知分散他们的注意力。因此,我需要该表达式可以匹配有效的用户名,无论其前面是否有@符号。
Twitter用户名可以包含拉丁字符、下划线和数字,唯一的限制是长度最多为15个字符。(但是我需要正则表达式也能匹配16个字符,以防有人在用户名前面输入@符号)。
我需要一个JavaScript正则表达式来匹配Twitter用户名。
该用户名由用户在注册时输入,所以我不想用太多错误通知分散他们的注意力。因此,我需要该表达式可以匹配有效的用户名,无论其前面是否有@符号。
Twitter用户名可以包含拉丁字符、下划线和数字,唯一的限制是长度最多为15个字符。(但是我需要正则表达式也能匹配16个字符,以防有人在用户名前面输入@符号)。
This should do:
^@?(\w){1,15}$
?
有什么作用? - San\w
的最后一个可能匹配项。例如,@zac
将仅捕获组c
。要使其捕获整个句柄,请将重复器放在括号内,如 ^@?(\w{1,15})$
。 - Merchako这是我找到的最佳解决方案,用于替换多个Twitter用户名的多个出现。
实现此功能的正则表达式为/(^|[^@\w])@(\w{1,15})\b/
。我捕获了@字符后面的内容,以便能够正确地替换用户名。并且我使用全局匹配标志(g),这样它就会替换所有出现的用户名。
asenovm的答案很简单,但在大多数用户输入上下文中都不起作用,正如techexpert在他的评论中所解释的那样。
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 );
这给了我期望中的结果(使用node v0.9.1测试过):
@RayFranco在回答@AnPel,这是一个真实的"@username83",但这是一个email地址,并且这是@probablyfaketwitterusername。
您的用户名不能超过15个字符。您的真实姓名可以更长(20个字符),但出于简便起见,用户名要保持较短。用户名只能包含字母数字字符(A-Z字母,0-9数字),下划线除外,如上所述。请检查您想要的用户名是否含有任何符号、破折号或空格。
希望这可以帮到你。
@[a-zA-Z0-9_]{0,15}
可以用来从混合数据中筛选出 Twitter 用户名。一种简单易行的方式:
function validTwitteUser(sn) {
return /^[a-zA-Z0-9_]{1,15}$/.test(sn);
}
另一个可以起作用的正则表达式是:
/(?<!\w)@[\w+]{1,15}\b/
第一部分(?<!\w)@
匹配@
,如果它之前没有字符值,则可以将其用作潜在电子邮件地址的过滤器,其格式为text@mail.com
。由于@
之前有文本,因此不会匹配电子邮件地址。
第二部分 [\w+]{1,15}\b
匹配单词字符字符串,即 a-z、A-Z、0-9 和 _,这些字符在 Twitter 用户名中被接受。\b
单词边界锚点匹配单词字符和非单词字符之间的空格。Twitter 用户名不接受非单词字符,因此由于 \b
而排除了它们。
最后,我提供了一张图片,在该图片中,我测试了所提议的正则表达式对 rayfranco 给出的第二个得票率最高的答案提供的文本进行匹配。
截图,
\b
后面多了一个不必要的空格? - mjsarfatti/(?<!\w)@[\w+]{1,15}\b/
。 - inpap^@(?=.*\w)[\w]{1,15}$
测试:@John_Doe2000
结果:
Match 1
Full match 0-13 @John_Doe2000
为了排除“非拉丁”字符,您需要使用:^@?([a-zA-Z0-9_]){1,15}$
。因为\w
接受“任何单词字符”。而非拉丁字符符合此条件。因此,它甚至匹配像土耳其字符üö
这样的字符。
@(\w){1,15}(:|)
/^@(\w){1,15}/g
,在@(at)符号上不需要加问号。或许这超出了你的需要,但我在另一个帖子中找到了这个 "正则表达式如何替换推特链接". 它可以包含 @用户名、#标签和urls。对我来说很有效。
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;
}