在开发包含twitter客户端的iOS应用程序时,我必须允许用户生成的主题标签(可以在应用程序的其他位置创建,而不仅仅是在推文正文中)。
我想确保任何此类主题标签对Twitter有效,因此我想错误地检查输入的无效字符值。请记住,用户可能来自非英语国家。
我知道通常的限制,例如没有开始带有数字的主题标签,也没有特殊的标点字符,但我想知道是否存在技术上允许在主题标签内的所有其他字符的已知列表(即国际字符)。
答案 0 :(得分:7)
Karl,正如您正确指出的那样,任何语言中的任何单词都可以是有效的Twitter主题标签(只要它符合许多基本标准)。因此,您要求的是有效的国际单词字符列表。我确定有人在某处编制了这样的列表,但使用它并不是达到最初目标的最有效方法:确保给定的标签对twitter有效。
我相信,您正在寻找的是一个正则表达式,可以匹配Unicode范围内的所有单词字符 。这样的表达式不依赖于您的语言环境,并且会匹配现代排版中可以作为单词的一部分出现的所有字符。
您没有指定您正在编写应用程序的语言,因此我无法帮助您使用特定于语言的实现。但是,基本方法如下:
检查您的语言中是否有任何括号表达式或字符类已支持 Unicode字符范围。如果是,请使用它们。
检查是否有正则表达式修饰符可以为您的语言启用 Unicode字符范围支持。
大多数现代语言以非常类似的方式实现正则表达式,其中很多都是从Perl中大量借用的,所以我希望以下两个例子能让你走上正轨:
<强>的Perl:强>
使用POSIX括号表达式(例如:[[:alpha:]]
,[[:allnum:]]
,[[:digit:]]
等),因为与字符类相比,它们可以让您更好地控制要匹配的字符(例如: :\w
)。
使用/u
修饰符在模式匹配时启用Unicode支持。在此修饰符下,ASCII平台有效地成为Unicode平台;因此,例如,\w
将匹配Unicode中超过100,000个单词字符中的任何一个。
有关详细信息,请参阅Perl文档:
<强>红宝石:强>
使用POSIX括号表达式,因为它们包含非ASCII字符。例如,/ \ d /仅匹配ASCII十进制数字(0-9);而/ [[:digit:]] /匹配Unicode Nd类别中的任何字符。
有关详细信息,请参阅Ruby文档:
<强>示例:强>
给定一个主题标签列表,以下正则表达式将匹配以单词字符开头的所有主题标签(包括国际单词字符),后跟另一个单词字符,数字或下划线:
m/^#[[:alpha:]][[:alnum:]_]+$/u # Perl
/^#[[:alpha:]][[:alnum:]_]+$/ # Ruby
答案 1 :(得分:4)
Twitter允许使用字母,数字和下划线。
我通过他们的API生成推文来检查这一点。例如,发推文
哈希标记测试#foo [bar
导致“#foo”被标记为哈希标记,“[bar”是未格式化的文本。
答案 2 :(得分:1)
嗯,对于初学者,你不能在主题标签中使用#(## hash)。
以下指南引自Twitter's help center:
- 人们在他们的推文中使用相关关键字或短语(无空格)之前的#标签符号来对这些推文进行分类,并帮助他们更轻松地在Twitter搜索中显示。
- 点击任意邮件中带有主题标签的字词,即可显示标有该关键字的所有其他推文。
- Hashtags可以出现在Tweet中的任何位置 - 开头,中间或结尾。
- 变得非常受欢迎的标签词通常是趋势主题 示例:在下面的推文中,@ eddie包含#FF标签。用户创建了这个“Follow Friday”的简写,这是一个每周传统,用户推荐其他人应该在Twitter上关注的人。你会在周五看到这个。
正确使用主题标签:
- 如果您在公共帐户上使用主题标签发推文,那么搜索该主题标签的任何人都可能会找到您的推文
- 不要#with #spam #with #hashtags。不要过度标记单个推文。 (最佳做法建议每个推文使用不超过2个主题标签。)
- 仅在与主题相关的推文上使用主题标签。
答案 3 :(得分:0)
我在golang中实现了同样的问题。 似乎允许使用[[:alpha:]]的字符只有英文字母,并且不能将此语法用于其他语言字符。 相反,我可以使用\ p {L}来实现此目的。
我使用\ p {L}进行的测试是here。 *阿拉伯语,希伯来语,印地语等尚未确认。
答案 4 :(得分:0)
只需添加字母数字字符和下划线,您显然可以在Twitter主题标签(例如#COVIDー19
)中使用破折号。
答案 5 :(得分:-1)
只允许字母和数字成为主题标签的一部分。如果除了这些字符之外的字符跟在前导#
和字母或数字之后,则此时标签将被截断。
如果用户输入字母或数字以外的任何内容,我建议用户界面通过更改输入字段的文本颜色向用户显示此内容。