Twitter标签中允许使用哪些字符?

21
在开发一个包含 Twitter 客户端的 iOS 应用时,我必须允许用户生成的标签(这些标签可能在应用程序中的其他位置创建,而不仅仅是在推文正文中)。
我想确保所有这样的标签都对 Twitter 有效,因此我想验证输入的值是否有无效字符。请注意,用户可能来自非英语国家。
我知道通常的限制,例如不能以数字开头的标签和没有特殊标点符号,但我想知道是否有已知的所有其他技术上允许在标签内使用的字符列表(即国际字符)。

1
我可以确认对于西里尔字母,您可以轻松地在俄语推特中找到许多类似于以下内容的推文:https://twitter.com/search?q=%23%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82&src=typd - Igor
请不要忘记接受其中一个答案。这将有助于未来阅读该页面的所有人(如何接受答案:https://meta.stackoverflow.com/a/251399/2068165) - UrsaDK
6个回答

10
卡尔,正如你所指出的,任何语言中的单词都可以成为有效的Twitter标签(只要它满足一些基本条件)。因此,你所要求的是一个有效的国际单词字符列表。我相信某个人已经编写了这样的列表,但使用它并不是达到你最初目标的最有效方法:确保给定的标签在Twitter上有效。
我认为你要找的是一个正则表达式,它可以匹配所有Unicode范围内的单词字符。这样的表达式不依赖于你的地区设置,并将匹配现代排版中可以作为单词的一部分出现的所有字符。
你没有说明你使用的是哪种语言编写应用程序,因此我不能帮助你进行特定语言的实现。但是,基本的方法如下:
1. 检查你使用的语言是否支持任何括号表达式或字符类的Unicode字符范围。如果是,就使用它们。 2. 检查是否有正则表达式修改器可以为你的语言启用Unicode字符范围支持。

现代大多数编程语言实现正则表达式的方式都相似,很多语言都借鉴了Perl的方法。以下两个例子希望能帮助你正确使用正则表达式:

Perl:

使用POSIX括号表达式(例如:[[:alpha:]][[:allnum:]][[:digit:]]等),与字符类(例如:\w)相比,它们可以更精确地控制要匹配的字符。

在模式匹配时使用/u修饰符启用Unicode支持。在此修饰符下,ASCII平台有效地变成了Unicode平台;因此,例如\w将匹配Unicode中的超过100,000个单词字符之一。

有关更多信息,请参阅Perl文档:

Ruby:

使用POSIX括号表达式,因为它们包含非ASCII字符。例如,/\d/仅匹配ASCII十进制数字(0-9);而/[[:digit:]]/匹配Unicode Nd类别中的任何字符。

有关更多信息,请参见Ruby文档:

例子:

给定一个标签列表,下面的正则表达式将匹配所有以单词字符(包括国际单词字符)开头,后跟至少一个其他单词字符、数字或下划线的标签:

    m/^#[[:alpha:]][[:alnum:]_]+$/u     # Perl

    /^#[[:alpha:]][[:alnum:]_]+$/       # Ruby

6

Twitter允许使用字母、数字和下划线。

我通过他们的API生成推文进行了检查。例如,发布以下推文:

Hash tag test #foo[bar

结果,"#foo"被标记为一个哈希标签,而"[bar"被视为未格式化的文本。


7
你能澄清是哪些字母吗?我不确定你是否完整阅读了我的问题,但我想知道支持哪些国际字符,如果有的话。 - Karl White

2

只是想补充一点,除了字母数字和下划线之外,在 Twitter 标签中似乎还可以使用 em 破折号,例如 #COVIDー19


1

首先,你不能在hashtag中使用 # 符号(##hash)。

以下准则摘自Twitter帮助中心

人们在Twitter上使用井号符号#,在相关的关键词或短语(无空格)之前,对这些推文进行分类,以帮助它们更容易地在Twitter搜索中显示。
在任何消息中点击标记有井号的单词,可以显示所有其他标记有该关键字的推文。
井号可以出现在推文的任何位置-开头、中间或结尾。
成为非常流行的带标签单词通常是趋势话题。例如,在下面的推文中,@eddie包括了#FF标签。用户将其创建为“Follow Friday”的速记,这是一个每周的传统,用户推荐其他人应该在Twitter上关注的人。您将在周五看到这一点。
正确使用标签:
如果您在公共帐户上推文并带有标签,任何搜索该标签的人都可能会找到您的推文。
不要用过多的标签来垃圾邮件。不要在单个推文中过度标记。(最佳实践建议每条推文使用不超过2个标签。)
只在与主题相关的推文中使用标签。

2
谢谢您的回复,不过我已经了解了相关指南。我只是找不到一个明确的列表,列出哪些外文字符可以用于标签。无论如何还是非常感谢您的帮助。 - Karl White

0

我在实现golang时遇到了同样的问题。 看起来允许使用[[:alpha:]]字符仅限于英文字母,并且不能对其他语言字符使用此语法。 相反,我可以使用\p{L}来解决这个问题。

我的\p{L}测试在这里。 * 阿拉伯语、希伯来语、印地语等还没有得到确认。


0

只允许字母和数字作为标签的一部分。如果在首个#和字母或数字之后出现其他字符,标签将在此处被截断。

我建议您的用户界面通过改变输入框中的文本颜色来提示用户,如果用户输入的内容不是字母或数字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接