Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript twitter用户名的正则表达式_Javascript_Regex - Fatal编程技术网

Javascript twitter用户名的正则表达式

Javascript twitter用户名的正则表达式,javascript,regex,Javascript,Regex,我需要一个javascript正则表达式来匹配twitter用户名 用户名是用户在注册时输入的,所以我不想用太多的错误通知分散他们的注意力。因此,如果用户名前有@或没有@,我需要表达式来匹配有效的用户名regardles Twitter用户名可以包含拉丁字符、下划线和数字,唯一的限制是最长可达15个字符。(但我还需要正则表达式匹配16个字符,以防有人在用户名之前输入@)。这应该可以: ^@(\w){1,15}$要排除非拉丁字符,必须使用:^@([a-zA-Z0-9){1,15}$。因为,\w接受

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

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

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

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

这是我找到的取代多次出现的twitter用户名的最佳解决方案

执行此技巧的正则表达式是
/(^ |[^@\w])@(\w{1,15})\b/
。我正在捕获@字符后面的内容,以便正确替换用户名。我使用全局匹配标志(g),所以它将替换所有出现的情况。 答案很简单,但在大多数用户输入上下文中不起作用,如中所述

var输出,
text=“@RayFranco正在回答@AnPel,这是一个真正的“@username83”,但这是an@email.com,这是一个@probablyfaketwitterusername“,
正则表达式=/(^ |[^@\w])@(\w{1,15})\b/g,
替换=“$1”;
输出=text.replace(regex,replace);
console.log(输出);
这给了我我所期望的(用节点v0.9.1测试):

回答说,这是一个真实的“但这是an@email.com,这是一个@probablyfaketwitterusername

这是基于:

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


希望这能有所帮助。

一个简单的方法:

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

这可能比你需要的要多,但我在另一篇文章“”中发现了这一点。包装@usernames、#hashtags和url。对我来说很好

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;
}
函数处理tweetlinks(文本){
var exp=/(\b(https?| ftp |文件):\/\/[-A-Z0-9+&@#\/%?=~~|!:,.;]*[-A-Z0-9+&@#\/%=~|]/gi;
text=text.replace(exp,“”);
exp=/(^|\s)#(\w+)/g;
text=text.replace(exp,“$1”);
exp=/(^ |\s)@(\w+)/g;
text=text.replace(exp,“$1”);
返回文本;
}
@[a-zA-Z0-9}{0,15}


您可以使用上面的正则表达式从一组混合数据中对twitter用户名进行排序

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

这可能有助于
完全匹配

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

结果:

Match 1
Full match  0-13    @John_Doe2000

试试看另一个做这项工作的方法是:

/(

  • 第一部分
    (?如果前面没有字符值,则与
    @
    匹配。 可以用作格式为
    text@mail.com
    。由于
    @
    前面有文本,因此电子邮件地址不匹配

  • 第二部分
    [\w+]{1,15}\b
    匹配twitter用户名中接受的一串单词字符,即a-z、a-z、0-9等。单词边界定位符
    \b
    匹配单词字符和非单词字符之间的空格。非单词字符在twitter用户名中不被接受,因此被排除在匹配之外,因为
    \b

最后但并非最不重要的一点是,我提供了一张图片,其中我根据rayfranco在第二个投票率最高的答案中提供的文本测试了建议的正则表达式,以检查是否匹配

截图,

那不是真的。\w完全匹配[a-zA-Z0-9_uu],其他什么都不匹配。在评论某件事之前,请至少测试它并确保它是真的。请看这里:我看不出这证明了什么。我想说的是\w与[a-zA-Z0-9_u]是一样的和\w与英文字母表中的其他字母不匹配。正则表达式实现似乎因平台而异。它在.NET上以这种方式工作,但在浏览器上失败。尽管它只适用于查找操作,但只想对不知道“regex”的人作一个一般性评论。此测试仅在检查的用户名是给定文本行或字符串中唯一存在的字符集,具体取决于“regex”引擎的版本,这就是为什么它被括在^和$之间的原因,但如果在同一行或字符串中存在任何其他字符(包括空白字符),则此测试将失败…只是想说明事实,因此,有些人不会尝试将其用于全文搜索。:)这里的
的作用是什么?
是一个量词,表示前面的类/组/字符要匹配0或1次。别忘了twitter句柄不允许使用“admin”或“twitter”这两个词名称/handlei中的任何位置如果将中继器放在捕获组之外,它将只捕获最后一个可能匹配的
\w
。例如,
@zac
将捕获组
c
。要使其捕获整个句柄,请将中继器放在括号内,如
^@(\w{1,15})$
。那太好了……如果有人不想让他们的正则表达式一开始就有数字,他们可以将上面的正则表达式修改为/^[a-zA-Z{1}[a-zA-Z0-9{0,14}$/这能回答你的问题吗?我相信在
\b
之后有一个打字错误,一个多余的空格?谢谢你@mjsarfatt你是对的。我的意思是写
/(?)?