我需要一个javascript正则表达式来匹配twitter用户名.
用户在注册时输入用户名,因此我不想用太多的错误通知来分散他们的注意力.因此,如果他们在用户名之前有@,我需要表达式匹配有效的用户名.
Twitter用户名可以包含拉丁字符,下划线和数字,唯一的限制是最多可以包含15个字符.(但我需要正则表达式匹配16个字符,以防有人在用户名之前输入@).
ase*_*ovm 39
这应该做:
^@?(\w){1,15}$
ray*_*nco 35
这是我发现的最好的解决方案,可以替换多次出现的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 );
Run Code Online (Sandbox Code Playgroud)
这给了我预期的结果(使用节点v0.9.1测试):
@RayFranco正在回答@AnPel,这是一个真正的' @ username83 ' ,但这是一个@ email.com,这是一个@probablyfaketwitterusername
这是基于用户名的Twitter"specs":
您的用户名不能超过15个字符.您的真实姓名可以更长(20个字符),但为了方便起见,用户名会更短.如上所述,用户名只能包含字母数字字符(字母AZ,数字0-9),但下划线除外.检查以确保所需的用户名不包含任何符号,短划线或空格.
希望这可以帮助.
一个简短的简单方法:
function validTwitteUser(sn) {
return /^[a-zA-Z0-9_]{1,15}$/.test(sn);
}
Run Code Online (Sandbox Code Playgroud)