首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有效hashtag的Regex

有效hashtag的Regex
EN

Stack Overflow用户
提问于 2017-02-06 10:46:06
回答 6查看 14.5K关注 0票数 6

我需要正则表达式来验证hashtag。每个hashtag应该以hashtag("#")开头。

有效投入:

1. #hashtag_abc

2. #simpleHashtag

3. #hashtag123

无效输入:

1. #hashtag#

2. #hashtag@hashtag

我一直在尝试这个regex /#[a-zA-z0-9]/,但是它也接受无效的输入。

对怎么做有什么建议吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-02-06 10:48:47

回答当前的问题.

有两个问题:

由于您正在验证整个字符串,因此还需要锚点(^$)来确保字符串完全匹配:

代码语言:javascript
复制
/^#\w+$/

regex演示

如果您想从较长的文本中提取特定的有效哈希标签.

这是一个额外的部分,因为很多人都希望提取(而不是验证)哈希标签,下面是一些解决方案。请记住,\w中的JavaScript (和许多其他正则表达式库)等于[a-zA-Z0-9_]

  • #\w{1,30}\b -一个#字符,后面跟着一个到30个单词字符,后面跟着一个单词边界。
  • \B#\w{1,30}\b -一个#字符,它要么位于字符串的开头,要么紧跟在一个非单词字符之后,然后是1到30个单词(即字母、数字或下划线)字符,后面跟着1到30个单词字符和一个单词边界。
  • \B#(?![\d_]+\b)(\w{1,30})\b - #,在字符串的开头或者在一个非单词字符之后,然后一个字到30个字(即字母、数字或下划线)字符(不能仅仅是数字/下划线)后面跟着一个单词边界。

最后但并非最不重要的是,这里有一个Twitter标签regex来自https://github.com/twitter/twitter-text/tree/master/js..。对不起,太长了不能粘贴在这样的帖子里,这里是:https://gist.github.com/stribizhev/715ee1ee2dc1439ffd464d81d22f80d1

票数 6
EN

Stack Overflow用户

发布于 2017-03-02 09:43:53

目前已被接受的答案在以下几个地方失败:

  • 它接受没有字母的标签(即"#11111“、"#___”都传递)。
  • 它将排除由空格分隔的哈希标签(“嘿,那里#friend”与“#friend”不匹配)。
  • 它不允许在散列标签上放置最小/最大长度。
  • 如果您决定将其他符号/字符添加到有效的输入列表中,则不会提供很大的灵活性。

尝试以下正则表达式:

代码语言:javascript
复制
/(^|\B)#(?![0-9_]+\b)([a-zA-Z0-9_]{1,30})(\b|\r)/g

它将关闭上述边缘情况,而且:

  • 可以将{1,30}更改为所需的min/max
  • 如果以后愿意,可以将其他符号添加到0-9_和a-zA-Z0-9_块中。

这是一个链接到演示

票数 16
EN

Stack Overflow用户

发布于 2021-03-07 15:14:41

你可以试试这个:/#[a-zA-Z0-9_]+/

这将只包括字母,数字和下划线。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42065872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档